如何在Android中使用ImageView拍摄照片后显示拍摄的图片并避免同步问题
问题描述:
您好我有一个应用程序使用SurfaceViews,我想显示拍摄的照片的预览图像以及让用户重试拍照。我遇到的问题是,方法PictureCallback是一个匿名函数,因此我无法返回任何文件名或ID,让我抓取图片并将其与重试按钮一起显示在SurfaceView上。你知道我能做到吗?在PictureCallback()函数在这里:(我已经编辑原创,而不是保存到我保存到一个全局变量文件,这样我可以通过我的CameraHelper对象日后访问)如何在Android中使用ImageView拍摄照片后显示拍摄的图片并避免同步问题
// global variable to access the bitmap when the camera callback has finished processing.
private bitmapPicture;
方法拍摄照片:
public void takeThePicture(Camera mCamera)
{
Log.d("Camera Information","Taking the picture inside takeThePicture() method");
// picture callback method is required to take a picture
Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// Create a Bitmap picture that we can later access through other way.
bitmapPicture = BitmapFactory.decodeByteArray(data, 0, data.length);
}
};
mCamera.takePicture(null,null,mPicture);
}
访问的画面一直在努力的唯一的问题是,它返回先前的画面,我注意到这样,所以访问到bitmapPicture变量的时间同步问题以及数据被保存到其中的时间。
希望你能帮助我:) 谢谢!
答
这是不可能的,因为PictureCallback是异步(这就是为什么它是无效)。捕捉图片可能需要几百毫秒。
典型的解决方案是将消息发送到活动的处理程序,并让该处理程序显示图像视图。这意味着您的takePicture(Camera)
方法不能是静态,但可以访问父活动或其处理程序。
感谢您的答案亚历克斯,我仍然不完全理解我将如何能够沟通我的处理程序和我的活动。我的活动里面有3个片段,其中一个有ImageView和我拍照的相机预览。如果我正在使用CameraHelper对象,当图片回调方法被调用时,如何能够从我的CameraHelper对象访问我的imageView?或者我会如何让我的片段知道相机何时完成拍照?现在也不是用图像创建文件,而是直接将数据发送到位图以避免IO延迟问题 – 2014-11-18 07:41:46