你好我有一个使用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变量的时间和数据保存的时间存在同步问题进入它。
希望你能帮我这个:) 谢谢!
答案 0 :(得分:0)
这是不可能的,因为PictureCallback是异步(这就是 void 的原因)。拍摄照片可能需要数百毫秒。
典型的解决方案是向活动的处理程序发送消息,并让此处理程序显示图像视图。这意味着您的takePicture(Camera)
方法无法静态,但可以访问父活动或其处理程序。