8

写真を撮って正方形にトリミングするために使用するカスタム カメラ アプリケーションがあります。最終的な出力画像 (特に向き) の 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) {
            }
        }
    };

更新: onPictureTaken メソッドに以下を追加しましたが、何も変更されていません:

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();
4

1 に答える 1

0

これが古いことは知っていますが、同様の問題があったため、最初にこれを記入すると思いました。角度を .TAG_ORIENTATION exif 属性に格納しようとしていることが理解できた場合。それは正しくありません。「getOrientation」メソッドを調整して、ExifInterface クラスに固有の次の方向定数のいずれかを指定してください。

特定の角度を入れると、exif データがイメージ ビューアーによって誤って読み取られ、あなたの質問をどのように読み取るかが、あなたがしていることになります。

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

于 2013-08-16T07:32:16.590 に答える