3

私はAndroidアプリケーションに取り組んでいます。私のアプリでは、画像をキャプチャしてその画像をサーバーに送信する必要があります。一部のデバイスでは、キャプチャされた画像が90度回転してサーバーに投稿されます。私はstackoverflowと他のいくつかのサイトで修正を検索しました。私は解決策を得ました..私はそれらすべてを使用しました例えば:

Uri selectedImage = data.getData();


File imageFile = new File(selectedImage.toString());
ExifInterface exif;
try {
exif = new ExifInterface(imageFile.getAbsolutePath());

int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:

rotate=90;

    break;
    case ExifInterface.ORIENTATION_ROTATE_180:

    rotate=180;
 break;
            }

しかし残念ながら、私はすべてのデバイスで常に方向0を取得しています。90度回転した画像デバイスでも。

私の問題の友達を修正するのを手伝ってください。

4

3 に答える 3

1

あなたが使う:

int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

したがって、defaultValue ExifInterface.ORIENTATION_NORMAL を送信します。あなたのexifには属性TAG_ORIENTATION(またはORIENTATION_UNDEFINED)がなく、デフォルト値を取得している可能性がありますか?

試す:

int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);

そして何が得られるか見てください。

于 2013-01-09T10:44:46.140 に答える
0

次のコードを使用して問題を修正しました。

private int getImageOrientation(){
    final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.ImageColumns.ORIENTATION };
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
    Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            imageColumns, null, null, imageOrderBy);

    if(cursor.moveToFirst()){
        int orientation = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns.ORIENTATION));
        rotate=orientation;
        System.out.println("orientation==="+orientation);
        cursor.close();
        return orientation;
    } else {
        return 0;
    }
}

親愛なる友人のあなたの応答をありがとう...

于 2013-01-11T07:19:38.090 に答える