我正在开发Android应用,想要使用相机进行一些操作(处理像素值),但只想在后台进行,不想使用Surface View。是否有可能只使用缓冲区读取像素值并进行处理呢? 感谢所有能够帮助我的人。
我正在开发Android应用,想要使用相机进行一些操作(处理像素值),但只想在后台进行,不想使用Surface View。是否有可能只使用缓冲区读取像素值并进行处理呢? 感谢所有能够帮助我的人。
从API级别11开始,新增了SurfaceTexture。通过它,不再需要使用SurfaceView。我在我的三星Galaxy S3 Neo上测试了以下代码。
mCamera = Camera.open();
try {
mCamera.setPreviewTexture(new SurfaceTexture(10));
} catch (IOException e1) {
Log.e(Version.APP_ID, e1.getMessage());
}
Parameters params = mCamera.getParameters();
params.setPreviewSize(640, 480);
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
params.setPictureFormat(ImageFormat.JPEG);
mCamera.setParameters(params);
mCamera.startPreview();
mCamera.takePicture(null, null, null, new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.i(Version.APP_ID, "picture-taken");
}
});
我已经寻找这个答案有一段时间了。我在那里找到了它,并为方便复制了过来。
http://handycodeworks.com/?p=19
基本上,我们只需要创建一个虚拟SurfaceView(即使在Service中也可以工作),并将其用于相机功能。
SurfaceView view = new SurfaceView(this);
c.setPreviewDisplay(view.getHolder());
c.startPreview();
c.takePicture(shutterCallback, rawPictureCallback, jpegPictureCallback);
new SurfaceTexture(10)
中的10
是什么?我们可以使用任何数字吗?这个10
有什么特殊之处吗?您是否像文档中所述那样使用该 ID 生成了纹理?相比使用SurfaceView
,这种方法更好吗? - Trigary