2012-11-11 13 views
8

写真を撮って四角に切り抜くためのカスタムカメラアプリケーションがあります。最終的な出力画像(特に方向)のExifデータの書き方を知りたいです。アンドロイドでカスタムカメラクラスを使用してExifデータを書き込む方法は?

私のコード:

captureButton = (Button) findViewById(R.id.button_capture); 
    captureButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // Take a picture 
      mCamera.takePicture(null, null, mPicture);         
     } 
    }); 

と、これはコールバック関数です。

PictureCallback mPicture = new PictureCallback() { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      File pictureFile = getOutputMediaFile(); 
      if (pictureFile == null) { 
       return; 
      } 
      try { 
       FileOutputStream fos = new FileOutputStream(pictureFile); 
       fos.write(data); 
       fos.close(); 
      } catch (FileNotFoundException e) { 

      } catch (IOException e) { 
      } 
     } 
    }; 

更新: 私は上に以下を追加しましたPictureTaken方法何も変更されました:

ExifInterface exif; 
       exif = new ExifInterface(pictureFile.getAbsolutePath()); 
// Notice getOrientation method gets an Integer with the angle : 0 , 90 , 180 , 270 ..etc 
       exif.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(getOrientation())); 
       exif.saveAttributes(); 

答えて

0

ので、私が最初にこれを埋めるだろうと思った私は、これは古いです知っているが、私は同様の問題がありました。 あなたが理解しているところでは、角度を.TAG_ORIENTATION exif属性に保存しようとしている場合。それは正しくないです、 はEXIFデータが誤って画像ビューアで読み取ることになる特定の角度に置くことで、あなたにExifInterface class.

に固有の以下のオリエンテーション定数のいずれかを与えるためにあなたの「getOrientation」メソッドを調整し、私はあなたの質問を読んでどのようにあなたがやっていることです。

int型ORIENTATION_FLIP_HORIZONTAL int型ORIENTATION_FLIP_VERTICAL
int型ORIENTATION_NORMAL int型ORIENTATION_ROTATE_180
int型ORIENTATION_ROTATE_270 int型ORIENTATION_ROTATE_90
int型ORIENTATION_TRANSPOSE int型ORIENTATION_TRANSVERSE
int型ORIENTATION_UNDEFINED

関連する問題