我想在将图片视为potrait时旋转位图。 我想了解图像是potrait还是lanscape? 我使用这段代码:
Bitmap photo = BitmapFactory.decodeFile(path_img,options);
int imageHeight = photo.getHeight();
int imageWidth = photo.getWidth();
当我将图像作为portroit和lanscape时,无所谓它总是这样: imageHeight = 390; imageWidth = 520;
我怎样才能理解照片是拍摄景观还是肖像。
由于
答案 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