Edd*_*eng 2 java camera android surfaceview surfaceholder
所以我设置了这个相机预览Camera,SurfaceView和SurfaceHolder.我还有一个ImageView地方,我将把相机图像的修改版本,我希望这更新让我们说每秒一次.
当我从"res"加载图像时,所有代码都准备好并且已经工作但是我很难从相机读取图像数据.
我已经尝试过了:
创建一个intentfor MediaStore.ACTION_IMAGE_CAPTURE并开始onActivityResult获取一个小缩略图(实际上足够我)(Bitmap)data.getExtras().get("data")
问题是这会打开相机应用程序,你需要"手动"拍照.
使用创建Camera.PreviewCallback,拍摄YuvImage并将其转换为图像YuvImage.compressToJpeg(...).
这里的问题是无论何时何地我都无法启动它 Camera.setPreviewCallbackWithBuffer(PreviewCallback).
PreviewHolder通过锁定到画布直接获取数据lockCanvas()并尝试将其转换为位图编辑: 这项工作的最佳方法是什么?我的意思是QR码阅读器必须不断地从相机中读取图像数据,它们如何工作?
我选择了2号选项,最终使它成功了.
用过这个回调,忘了@Override之前
private Camera.PreviewCallback previewCallback= new Camera.PreviewCallback()
{
@Override
public void onPreviewFrame(byte[] data,Camera cam)
{
Camera.Size previewSize = cam.getParameters().getPreviewSize();
YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21,previewSize.width,previewSize.height, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0,0,previewSize.width,previewSize.height),80,baos);
byte[] jdata = baos.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(jdata,0,jdata.length);
}
};
Run Code Online (Sandbox Code Playgroud)
并使用setPreviewCallback而不是使用它来启动它setPreviewCallbackWithBuffer
SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback()
{
public void surfaceCreated(SurfaceHolder holder) {
camera.setPreviewCallback(previewCallback);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4332 次 |
| 最近记录: |