为了完成相机叠加,我写了一个程序,我发现当我在onPictureTaken()中设置变量“image_data”时,它并没有立即改变值,当我再次调用onPictureTaken时它改变了值 我无法解决它,任何人都可以帮助我吗?
private PictureCallback jpegCallback = new PictureCallback()
{public void setImageData(byte[] b) {
image_data = b;
}
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
if (mCamera != null){
mCamera.startPreview();}
FileOutputStream outStream = null;
try {
// Write to SD Card
outStream = new FileOutputStream(String.format("/sdcard/%d.jpg",
System.currentTimeMillis()) );
outStream.write(data);
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
Log.d(TAG, String.valueOf(data));
image_data = data;
setImageData(data); //neither direct assign nor setImageData are invalid
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
Log.d(TAG, "onPictureTaken - jpeg");
}
};
CameraTestActivity代码
mCamera.takePicture();
Toast toast = Toast.makeText(CameraTestActivity.this,
"PhotoTaken"+mCamera.getImageData(), Toast.LENGTH_LONG);
toast.show();
而第一张 toast 秀的照片是“PhotoTaken null” 辅助输出是“PhotoTaken B@c4f05e2”
以下是logcat数据
12-03 22:19:20.416 21589-21589/com.example.acer.camerapreview
D/CameraTest.VersionedCamera: onPictureTaken - wrote bytes: 1644369
12-03 22:19:20.416 21589-21589/com.example.acer.camerapreview
D/CameraTest.VersionedCamera: [B@c4f05e2
12-03 22:19:29.631 21589-21589/com.example.acer.camerapreview
D/CameraTest.VersionedCamera: onPictureTaken - wrote bytes: 1622238
12-03 22:19:29.631 21589-21589/com.example.acer.camerapreview
D/CameraTest.VersionedCamera: [B@adb9e2e
最佳答案
mCamera.takePicture()
需要传递一个PictureCallback
,那么你在哪里传递你的PictureCallback
(在你的代码中,我看到你的callback
是 jpegCallback
) 吗?
Toast.makeText(CameraTestActivity.this, "PhotoTaken"+ mCamera.getImageData(), Toast.LENGTH_LONG).show()
PictureCallback
应该写对>,不低于它。
例如:
mCamera.takePicture(null, null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// your code in here is correct ✔︎
}
});
但是
mCamera.takePicture(null, null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
}
});
// your code in here is wrong ✕
关于android - 相机预览 onPictureTaken 在 android 中返回错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47619335/