2014-10-19 123 views
0

您好我有一个应用程序使用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变量的时间同步问题以及数据被保存到其中的时间。

希望你能帮助我:) 谢谢!

回答

0

这是不可能的,因为PictureCallback是异步(这就是为什么它是无效)。捕捉图片可能需要几百毫秒。

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

+0

感谢您的答案亚历克斯,我仍然不完全理解我将如何能够沟通我的处理程序和我的活动。我的活动里面有3个片段,其中一个有ImageView和我拍照的相机预览。如果我正在使用CameraHelper对象,当图片回调方法被调用时,如何能够从我的CameraHelper对象访问我的imageView?或者我会如何让我的片段知道相机何时完成拍照?现在也不是用图像创建文件,而是直接将数据发送到位图以避免IO延迟问题 – 2014-11-18 07:41:46