如何在使用ImageView在Android中拍照后显示拍照并避免同步问题

时间:2014-10-19 20:07:16

标签: android image camera save surfaceview

你好我有一个使用SurfaceViews的应用程序,我想显示所拍照片的预览图像和一个让用户重试拍照的按钮。我遇到的问题是Method PictureCallback是一个无效的匿名函数,因此我无法返回任何文件名或ID,让我抓住图片并显示它覆盖SurfaceView以及重试按钮。你知道我怎么做吗? PictureCallback()函数在这里:(我已经编辑了原文,而不是保存到我保存到全局变量的文件中,以便我以后可以通过我的CameraHelper对象访问它)

// 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变量的时间和数据保存的时间存在同步问题进入它。

希望你能帮我这个:) 谢谢!

1 个答案:

答案 0 :(得分:0)

这是不可能的,因为PictureCallback是异步(这就是 void 的原因)。拍摄照片可能需要数百毫秒。

典型的解决方案是向活动的处理程序发送消息,并让此处理程序显示图像视图。这意味着您的takePicture(Camera)方法无法静态,但可以访问父活动或其处理程序。