我正在关注此链接Android get Orientation of a camera Bitmap? And rotate back -90 degrees以便在必要时轮换我的图片,但它不适用于我,我收到此错误
05-28 23:29:30.049 9735-9735 / ss.sealstudios.com.socialstories E / JHEAD:无法打开'/ document / 508'
但是像下面那样检查就好像指向正确的位置
05-28 23:29:30.049 9735-9735 / ss.sealstudios.com.socialstories I / System.out:bitmap uri content://com.android.providers.downloads.documents/document/508 0
//最后的0是我检查轮换
我想知道这是否是特定版本的版本,比如从URI获取真实路径,因为在我的marshmallow设备上运行此代码会给我一个完全不同的结果(这个结果,即:错误代码,来自kitkat设备),但这已经打败了我好几个星期了,各种各样的答案无济于事,任何人都可以帮我讨厌,这就是我想要做的事情
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data
!= null
&& data.getData() != null)
{
Uri uri = data.getData();
try {
BitmapFactory.Options bitmapOptions = new
BitmapFactory.Options();
bitmapOptions.inSampleSize = (int) 4;
InputStream inputStream =
getContentResolver().openInputStream(uri);
Bitmap scaledBitmap = BitmapFactory.decodeStream(inputStream,
null, bitmapOptions);
ExifInterface exif = new ExifInterface(uri.getPath());
int rotation =
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
int rotationInDegrees = exifToDegrees(rotation);
System.out.println("bitmap uri " + uri + " " + rotation);
Matrix matrix = new Matrix();
if (rotation != 0f){
matrix.preRotate(rotationInDegrees);
Bitmap.createBitmap(scaledBitmap, 0,
0,scaledBitmap.getWidth(),scaledBitmap.getHeight(),
matrix, true);
imageView.setImageBitmap(scaledBitmap);
}else
imageView.setImageBitmap(scaledBitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
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;
}
非常感谢
答案 0 :(得分:0)
ExifInterface exif = new ExifInterface(uri.getPath());
这不起作用。如果您在getPath()
上致电Uri
,那么您做错了,因为这对于大多数Uri
值来说毫无意义,特别是那些content
方案的值,就像您的那样。
由于SDK的ExifInterface
仅适用于本地文件,因此您需要其他EXIF代码。我使用some code from the AOSP for this。该版本的ExifInterface
可以与InputStream
一起使用,因此您可以为InputStream
标识的内容获取新的Uri
,并将其传递给替代ExifInterface
}。