2012-07-14 49 views
3

我的画廊中有横向或纵向照片。在Gallery应用程序中正确显示。当我使用意图从图库中选择图片时,我得到一个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);   
} 
+0

[可能的重复](http://stackoverflow.com/q/4517634/420015) – adneal 2012-07-14 16:01:05

回答

3

有由内容提供商使用的MediaStore.Images.Media.ORIENTATION场。

的代码需要通过包括外地来告诉你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. 
5

使用这里面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); 
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; 
} 
相关问题