9

ボタンをクリックしてカメラアプリを開いています。そして、キャプチャした写真を次のアクティビティで表示します。しかし、キャプチャされた写真は90度回転しています。キャプチャした後に画像をビューに表示すると、その向きは常に横向きになります。ポートレートモードで撮影したときに、写真がポートレートで表示されないのはなぜですか?

ボタンのonClick:

Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(APP_DIR+"/latest.png")));       
startActivityForResult(i, CAPTURE_PHOTO_CONSTANT);

onActvityresultの内部:

bmp = BitmapFactory.decodeFile(APP_DIR+"/latest.png");
startActivity(new Intent(this, DisplayActivity.class));

キャプチャした写真の表示:

photoViewRelativeLayout.setBackgroundDrawable(new BitmapDrawable(getResources(), CaptureActivity.bmp));
4

5 に答える 5

17

ほとんどの場合、Samsung ハンドセットで同じ問題が発生しました。明らかに、Samsung の携帯電話は、個々のピクセルを回転させるのではなく、EXIF 方向タグを設定します。BitmapFactory を使用してビットマップを読み取ると、このタグがサポートされません。アクティビティのメソッド。カメラからキャプチャされた画像の URI に関連付けられている向きをチェックします。

                        int rotate = 0;
                        try {
                            getContentResolver().notifyChange(imageUri, null);
                            File imageFile = new File(imagePath);
                            ExifInterface exif = new ExifInterface(
                                    imageFile.getAbsolutePath());
                            int orientation = exif.getAttributeInt(
                                    ExifInterface.TAG_ORIENTATION,
                                    ExifInterface.ORIENTATION_NORMAL);

                            switch (orientation) {
                            case ExifInterface.ORIENTATION_ROTATE_270:
                                rotate = 270;
                                break;
                            case ExifInterface.ORIENTATION_ROTATE_180:
                                rotate = 180;
                                break;
                            case ExifInterface.ORIENTATION_ROTATE_90:
                                rotate = 90;
                                break;
                            }
                            Log.v(Common.TAG, "Exif orientation: " + orientation);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                        /****** Image rotation ****/
                        Matrix matrix = new Matrix();
                        matrix.postRotate(orientation);
                        Bitmap cropped = Bitmap.createBitmap(scaled, x, y, width, height, matrix, true);
于 2012-06-14T04:29:59.613 に答える
0

単純に回転させることができます

onActivityresult でこのコードを使用して撮影した画像の向きを取得します ....

File imageFile = new File(imageUri.toString());
       ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath());
       int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
       int rotate = 0;
       switch(orientation) {
         case ORIENTATION_ROTATE_270:
             rotate-=90;break;
         case ORIENTATION_ROTATE_180:
             rotate-=90;break
         case ORIENTATION_ROTATE_90:
             rotate-=90;break
       }
于 2012-06-14T04:27:45.057 に答える