

Camera2 APIを使用しています。  
撮影をした後に画像の向きを取得して、正しい位置に修正したいのですが、うまいやり方が見つかりません。  
現在は下記のようにして、向きを修正しています。

[code]

    public ImageStore(Image image, File file, Context con, int cameraDirec) {
        mImage = image;
        mFile = file;
        this.context = con;
        this.camDirection = cameraDirec;
    }
    
    @Override
    public void run() {
    
        Bitmap bmp = null;
        ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
        byte[] bytes = new byte[buffer.remaining()];
        buffer.get(bytes);
    
        try {
            bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);
        }catch (Exception e){
            e.printStackTrace();
        }
    
        Matrix m;
    
        if(bmp.getWidth() > bmp.getHeight()) {
            if (camDirection == FRONT_CAMERA) {
                m = new Matrix(); 
                m.setRotate(270);
                bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), m, true);
            } else {
                m = new Matrix(); 
                m.setRotate(90);
                bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), m, true);
            }
        }
    }
    
[/code]

上記のやり方ですと、機種によってはうまくいかないことがありまして、もし可能なら現在の向きを取得できるようにしたいです。  
ExifInterfaceを使用できればと思ったのですが、ファイルに保存しているわけではないせいなのか、うまく取得ができませんでした。

お詳しい方いましたらよろしくお願い致します。

**追記**  
一応無理やりですが自己解決いたしました。  
ギャラリーには撮った写真を残したくなかったのですが、Exif情報が欲しかったため、一時的にギャラリーに保存してから、再度ギャラリーから取得して、Exif情報取得しました。  
Exif情報を取得できたらギャラリーから画像を削除するという、ちょっと無理やりですが、このような仕様にしました。  
引き続き良い方法ありましたらよろしくお願い致します。


CC BY-SA 3.0
2016-09-20T18:25:10.433
29009
2023-10-24T08:01:25.147
2018-04-01T04:15:05.897
3060
16955
question
android camera
Camera2APIで撮影した画像の向きを取得する方法


撮影が実行されたとき（TakePicture でしょうか？）、端末がどの向きにあるかを取得し、それを元にしてみる方法では如何でしょうか？

[code]

    // Activity クラス以下で記述する場合のコード例です
    int rotation = this.getWindowManager().getDefaultDisplay().getRotation();
    switch (rotation) {
        case Surface.ROTATION_0  : return 0;
        case Surface.ROTATION_90 : return 90;
        case Surface.ROTATION_180: return 180;
        case Surface.ROTATION_270: return 270;
    }
    return 0;
    
[/code]


CC BY-SA 3.0
2016-09-21T07:38:32.967
29023
2016-09-21T07:38:32.967
5827
29009
answer