gpt4 book ai didi

android - 为什么使用相机 Intent 捕获的图像会在 Android 上的某些设备上旋转?

转载 作者:IT老高 更新时间:2023-10-28 12:49:56 25 4
gpt4 key购买 nike

我正在捕捉图像并将其设置为 ImageView 。

public void captureImage() {

Intent intentCamera = new Intent("android.media.action.IMAGE_CAPTURE");
File filePhoto = new File(Environment.getExternalStorageDirectory(), "Pic.jpg");
imageUri = Uri.fromFile(filePhoto);
MyApplicationGlobal.imageUri = imageUri.getPath();
intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intentCamera, TAKE_PICTURE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intentFromCamera) {
super.onActivityResult(requestCode, resultCode, intentFromCamera);

if (resultCode == RESULT_OK && requestCode == TAKE_PICTURE) {

if (intentFromCamera != null) {
Bundle extras = intentFromCamera.getExtras();
if (extras.containsKey("data")) {
bitmap = (Bitmap) extras.get("data");
}
else {
bitmap = getBitmapFromUri();
}
}
else {
bitmap = getBitmapFromUri();
}
// imageView.setImageBitmap(bitmap);
imageView.setImageURI(imageUri);
}
else {
}
}

public Bitmap getBitmapFromUri() {

getContentResolver().notifyChange(imageUri, null);
ContentResolver cr = getContentResolver();
Bitmap bitmap;

try {
bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr, imageUri);
return bitmap;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}

但问题是,某些设备上的图像每次旋转时都会出现。例如,在三星设备上运行良好,但在 Sony Xperia图像旋转 90 度并在 Toshiba Thrive 上(平板电脑)旋转 180 度。

最佳答案

大多数手机摄像头都是横向的,这意味着如果您拍摄纵向照片,生成的照片将旋转 90 度。在这种情况下,相机软件应填充 Exif带有查看照片的方向的数据。

请注意,以下解决方案取决于填充 Exif 数据的相机软件/设备制造商,因此它在大多数情况下都可以工作,但它不是 100% 可靠的解决方案。

ExifInterface ei = new ExifInterface(photoPath);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED);

Bitmap rotatedBitmap = null;
switch(orientation) {

case ExifInterface.ORIENTATION_ROTATE_90:
rotatedBitmap = rotateImage(bitmap, 90);
break;

case ExifInterface.ORIENTATION_ROTATE_180:
rotatedBitmap = rotateImage(bitmap, 180);
break;

case ExifInterface.ORIENTATION_ROTATE_270:
rotatedBitmap = rotateImage(bitmap, 270);
break;

case ExifInterface.ORIENTATION_NORMAL:
default:
rotatedBitmap = bitmap;
}

这里是 rotateImage 方法:

public static Bitmap rotateImage(Bitmap source, float angle) {
Matrix matrix = new Matrix();
matrix.postRotate(angle);
return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(),
matrix, true);
}

关于android - 为什么使用相机 Intent 捕获的图像会在 Android 上的某些设备上旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14066038/

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