【发布时间】:2017-12-03 14:25:27
【问题描述】:
我写了一个程序来完成相机叠加,我发现当我在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();
第一张照片拍摄的吐司节目是“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
【问题讨论】:
-
the first time I call obPictureTaken() it returned null.???一个不调用 onPictureTaken()。你也不。它不能返回 null,因为它是一个 void 函数。你的话完全没有意义。 -
您应该将 Toast 放入 onPictureTaken。好吧,如果可能的话。
-
我的英语不好..请不要介意,我的意思是当我在 onPictureTaken() 中设置变量“image_data”时,它不会立即更改值,它会更改值我再次调用 onPictureTaken
标签: android camera android-camera overlay android-camera-intent