1

私はカメラのオーバーレイを完成させるためにプログラムを書いていましたが、onPictureTaken()で変数 "image_data"を設定したときに値がすぐに変わらず、私は再びonPictureTakenを呼び出すときに値 私はそれを解決することはできません、誰も私を助けることができますか?カメラのプレビュー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(); 

と最初の写真撮影したトーストショー "が撮影さヌル" 二次出力が "撮影さ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: [[email protected] 
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: [[email protected] 
+0

'私はobPictureTaken(コール1回目)には、nullを返しました。 '??? onPictureTaken()は呼び出されません。あなたもいません。それはvoid関数なのでnullを返すことはできません。あなたの言葉はまったく意味がありません。 – greenapps

+0

トーストをonPictureTakenに置く必要があります。可能であれば。 – greenapps

+0

私の英語はうまくいきません。気にしないでください。私はonPictureTaken()で変数 "image_data"を設定するとすぐに値を変更しません。 –

答えて

1

mCamera.takePicture()は、を渡す必要があります、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 ✕ 
関連する問題