【发布时间】:2014-06-13 20:28:12
【问题描述】:
我有一个应用程序,客户端使用相机拍照。在人们点击我的“点击”按钮之前,图像的预览正在使用 SurfaceView 显示在平板电脑中。当用户点击点击按钮时,会调用 onPictureTaken 方法,在该方法中,我会保存图像并调用 camera.stopPreview() 方法(这样用户就可以看到拍摄的照片)。
但是有一个问题...如果用户在拍摄图片的那一刻在平板电脑上移动,在调用 stopPreview 方法后实际显示的静止图片不对应于我进入了 onPictureTaken 方法的字节数组。那里有几毫秒的延迟,当用户在拍摄照片之前在平板电脑周围移动时,差异会很明显(我知道 99% 的人在拍照时不会移动平板电脑,但我的客户实际上注意到了这个问题并希望修复它......)。我已经尝试将保存操作移动到一个单独的线程,如下所示,这样 onPictureTaken 方法可以尽可能快地执行。然而,它根本没有任何效果......
private PictureCallback pictureCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
camera.stopPreview();
reference = data;
new PictureCallbackHeavy().execute();
}
};
我也尝试在调用 takePicture 方法之前调用 camera.stopPreview()(而不是在 onPictureTaken() 方法内)。但结果是一样的。
我可以做些什么来同步 stopPreview 方法,这样我就可以准确地显示拍摄的图像并且在 onPictureTaken() 回调的字节数组中?
提前谢谢你!! =)
【问题讨论】:
-
你在
new PictureCallbackHeavy().execute()做什么操作?
标签: android camera sync surfaceview preview