android - 相机预览 onPictureTaken 在 android 中返回错误数据

标签 android camera android-camera overlay android-camera-intent

为了完成相机叠加,我写了一个程序,我发现当我在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(在你的代码中,我看到你的callbackjpegCallback) 吗?

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/

相关文章:

android - android中每个 Activity 的通用按钮onClick

android - android系统多久扫描一次wifi

camera - 实时摄像头输入到 Julia-lang

unity3d - 如何从Unity3d摄像头抓取帧并实时显示在另一个rawImage上?

javascript - 直接在 JavaScript 中与相机通信

android - 调用默认相机并将图片保存在不属于图库的用户定义位置

java - Android Studio模拟器无法启动应用

android - 调用Camera出现ANR错误如何解决?

Android:如何从一组图像制作视频

android - TTS 的默认音频流是什么?