4

ギャラリーに横向きまたは縦向きの写真があります。ギャラリー アプリケーションに正しく表示されます。インテントを使用してギャラリーから画像を選択すると、URI が返されます。しかし、画像を表示する前に、画像が縦向きか横向きかをどのように確認すればよいでしょうか?

私のアプリケーションは、次のようなインテントを使用して写真を選択します。

    private OnClickListener btnChooseFromLibraryListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);  
        intent.setType("image/*");
        startActivityForResult(intent, REQ_CODE_PICK_IMAGE);
    }
};

意図を取り戻す方法は次のとおりです。

    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case REQ_CODE_PICK_IMAGE:
        if(resultCode == RESULT_OK){  
            Uri selectedImage = imageReturnedIntent.getData();
            String[] filePathColumn = {MediaStore.Images.Media.DATA};

            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String filePath = cursor.getString(columnIndex);
            cursor.close();

            SetPicture(filePath);
        }
    }
}

private void SetPicture(String filePath) {
    Bitmap bm = BitmapFactory.decodeFile(filePath);
    Log.d("TW", "Picture Path:" + filePath);
    String size = String.format("Width:%d Height:%d", bm.getWidth(), bm.getHeight());
    Log.d("TW", size);
    ivPicture.setImageBitmap(bm);
    ui.setLastPicture(filePath);        
}
4

3 に答える 3

6

中でこれを使うonActivityResult()

Uri selectedImage = imageReturnedIntent.getData();
                    String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};
                    Cursor cur = managedQuery(selectedImage, orientationColumn, null, null, null);
                    int orientation = -1;
                    if (cur != null && cur.moveToFirst()) {
                        orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));
                    }  

Matrix オブジェクトを使用して画像を回転させます

  Matrix matrix = new Matrix();
  matrix.postRotate(orientation);
于 2012-07-14T16:18:54.567 に答える
3

MediaStore.Images.Media.ORIENTATIONコンテンツ プロバイダーが使用するフィールドがあります。

画像の向きを 0、90、180、270 度で表すフィールドを含めることで、コードを少し変更する必要があります。

String[] filePathColumn = {
         MediaStore.Images.Media.DATA, 
         MediaStore.Images.Media.ORIENTATION
};
Cursor cursor = getContentResolver().query(selectedImage, 
                   filePathColumn, 
                   null, 
                   null, 
                   null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
int orientationIndex = cursor.getColumnIndex(filePathPathColumn[1]);
String filePath = cursor.getString(columnIndex);
String degreesOrientation = cursor.getString(orientationIndex);
cursor.close();
// Now degreesOrientation will tell you exactly the rotation, as in
int nDegrees = Integer.parse(degreesOrientation);
// Check nDegrees - for example: if (nDegrees == 0 || nDegrees == 180) portrait.
于 2012-07-14T16:11:43.537 に答える
1

上記の「回答」の後に、次のメソッドを書きました。うまくいけば、これは他の誰かを助けるでしょう。

private int GetRotateAngle(Uri imageUri) {
    String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.ORIENTATION};
    Cursor cursor = getContentResolver().query(imageUri, columns, null, null, null);
    if (cursor == null) { return 0; }
    cursor.moveToFirst();

    int orientationColumnIndex = cursor.getColumnIndex(columns[1]);
    int orientation = cursor.getInt(orientationColumnIndex);
    cursor.close();
    return orientation;
}
于 2012-07-15T12:46:28.627 に答える