2016-06-30 11 views
0

同様の質問がありますが、私の特定の状況に一致するものはありません。decodeByteArrayデータからonPictureTakenコールバックが返されます。

私はカメラコントロールを公式tutorialで実装しています。

私が撮影する方法は、mCamera.takePicture(null, null, this)を呼び出してから、onPictureTakenからコールバックを受信することです。私が抱えている問題は、にデータが渡されているとは思われません。decodeByteArraydecodeByteArrayはnullを戻し続けます。バイト配列の形式が無効であるようです。

チュートリアルと同じようにFileOutputStreamを介してバイト配列を保存してから、decodeFileを介して再びバイト配列を読み込み、それでもnullを返しました。例外をキャプチャしようとしましたが、捕まえられませんでした。

写真をうまく保存できることに注意してください。渡された引数からバイトを読み取ることができません。私はこれを理解できないようです。ここで

は私のコードです:

@Override 
public void onPictureTaken(byte[] data, Camera camera) 
{ 
    FileOutputStream out = null; 
    String fileName = Photo.getDirectory(this) + "/Confirm_" + mDateFormatter.format(new Date()) + ".jpg"; 

    try 
    { 
     File temp = new File(fileName); 
     out = new FileOutputStream(temp); 
     out.write(data); 
     out.close(); 

     try 
     { 
      // This always returns NULL 
      BitmapFactory.Options option = new BitmapFactory.Options(); 
      option.inJustDecodeBounds = true; 
      option.inSampleSize = 2; 
      Bitmap bitmap = BitmapFactory.decodeFile(fileName, option); 

      if(bitmap == null) ; // TRUE 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

     /* 
     Camera.Parameters param = mCamera.getParameters(); 
     List<Camera.Size> sizes = param.getSupportedPictureSizes(); 
     Bitmap bitmap = BitmapFactory.decodeFile(fileName); 

     for(Camera.Size s : sizes) 
     { 
      Log.i(PhotoApplication.TAG, "Size : " + s.width + " x " + s.height); 
     } 
     */ 

     Intent intent = new Intent(); 
     intent.putExtra(EXTRA_FILENAME, temp.getAbsolutePath() + "/" + temp.getName()); 
     setResult(RESULT_OK, intent); 

     Toast.makeText(this, "Saving as : " + temp.getAbsolutePath() + "/" + temp.getName(), Toast.LENGTH_LONG).show(); 
    } 
    catch(FileNotFoundException e) 
    { 

    } 
    catch(IOException e) 
    { 

    } 
    finally 
    { 
     try 
     { 
      if(out != null) 
       out.close(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    finish(); 
} 

答えて

1

問題がtrueに設定されている場合、文書

によると、デコーダはヌル(無ビットマップ)を返します

option.inJustDecodeBounds = true; 

ですアウトフィールドはまだ設定されているので、ピクセルのメモリを割り当てることなく呼び出し元がビットマップを照会できるようになります。

これを削除するか、後で使用するためにビットマップをデコードする場合はfalseに設定してください。

+0

これは私の顔を叩くものです。どうもありがとうございました! –

関連する問題