gpt4 book ai didi

android - 如何使用android中的相机检查图像是以纵向模式还是横向模式捕获的?

转载 作者:搜寻专家 更新时间:2023-11-01 08:53:52 24 4
gpt4 key购买 nike

我正在创建一个打开照片库的应用程序,通过从图库中选择照片,照片将显示在另一个 Activity 中。我的问题是我在纵向模式下拍摄的照片在显示后会旋转。但是我在横向模式下拍摄的照片会正确显示。

这就是为什么我必须使用 android 中的相机检查图像是以纵向模式还是以横向模式捕获的,以便我可以旋转纵向捕获的照片。谁能帮我怎么做?

注意:纵向拍摄图像和横向拍摄图像的宽度和高度相同。

最佳答案

您始终可以使用 Matrix 检查图像的旋转并相应地旋转它。

这段代码放在onActivityResult-->

    BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = false;
bmOptions.inPurgeable = true;

Bitmap cameraBitmap = BitmapFactory.decodeFile(filePath);//get file path from intent when you take iamge.
ByteArrayOutputStream bos = new ByteArrayOutputStream();
cameraBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);


ExifInterface exif = new ExifInterface(filePath);
float rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
System.out.println(rotation);

float rotationInDegrees = exifToDegrees(rotation);
System.out.println(rotationInDegrees);

Matrix matrix = new Matrix();
matrix.postRotate(rotationInDegrees);

Bitmap scaledBitmap = Bitmap.createBitmap(cameraBitmap);
Bitmap rotatedBitmap = Bitmap.createBitmap(cameraBitmap , 0, 0, scaledBitmap .getWidth(), scaledBitmap .getHeight(), matrix, true);
FileOutputStream fos=new FileOutputStream(filePath);
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();

OnActivityResult 代码到此结束。

下面这个函数用于获取旋转:-

    private static float exifToDegrees(float 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;
}

关于android - 如何使用android中的相机检查图像是以纵向模式还是横向模式捕获的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20728684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com