位图getWidth()和getHeight()总是返回相同的大小?

时间:2014-01-14 14:41:11

标签: android android-camera bitmapfactory android-bitmap

我想在将图片视为potrait时旋转位图。 我想了解图像是potrait还是lanscape? 我使用这段代码:

   Bitmap  photo   = BitmapFactory.decodeFile(path_img,options); 
   int imageHeight = photo.getHeight();
   int imageWidth  = photo.getWidth();

当我将图像作为portroit和lanscape时,无所谓它总是这样: imageHeight = 390; imageWidth = 520;

我怎样才能理解照片是拍摄景观还是肖像。

由于

2 个答案:

答案 0 :(得分:1)

从nigels链接获取的代码并将其更改为提供的代码段

Bitmap  photo   = BitmapFactory.decodeFile(path_img,options);
ExifInterface exif = new ExifInterface(path_img);
int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);  
int rotationInDegrees = exifToDegrees(rotation);

Matrix matrix = new Matrix();
if (rotation != 0f) {
    matrix.preRotate(rotationInDegrees);
}

Bitmap adjustedBitmap = Bitmap.createBitmap(photo, 0, 0, width, height, matrix, true);

private static int exifToDegrees(int exifOrientation) {        
    if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) { return 90; } 
    else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {  return 180; } 
    else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {  return 270; }            
    return 0;    
}

从我的理解,这个代码片段和2个方法应该由他们自己做所有的工作。

答案 1 :(得分:0)

  

我如何理解图片是采用景观还是肖像?

假设图像当前存储在文件中,您可以从Exif元数据对象中获取它的方向:

File f = new File(capturedImageFilePath);
ExifInterface exif = new ExifInterface(f.getPath());
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

请注意,此信息不一定可用 - 由捕获图像的应用程序将此元数据存储在文件中。

如果此信息不存在,getAttributeInt将返回ExifInterface.ORIENTATION_NORMAL

方向可以是以下之一:ExifInterface.ORIENTATION_ROTATE_90 / ExifInterface.ORIENTATION_ROTATE_180 / ExifInterface.ORIENTATION_ROTATE_270