我做了一个自定义的相机应用程序,我想在 ImageView 上显示图片。我在 3 款不同的手机(HTC Desire Z、Galaxy S4 和 Galaxy S2)上启动了我的程序。在 HTC 上,图片的方向在 ImageView 中得到尊重,但在 Galaxys 中则没有。
我的程序是这样工作的:
-> 我用自定义相机应用程序拍照
-> 我根据手机方向(OrientationEventListener)设置图片的 EXIF 标志:
switch(getOrientation(rot)){
case VERTICAL_ENDROIT : params.setRotation(90); break;
case HORIZONTAL_ENDROIT : params.setRotation(0); break;
case VERTICAL_ENVERS : params.setRotation(270); break;
case HORIZONTAL_ENVERS : params.setRotation(180); break;
}
camera.setParameters(params);
此功能在所有手机上都运行良好,它们都检测到并分配了正确的方向。
-> 我把它保存为 JPG 格式
-> 我将图片发送到 ImageView
Bitmap bm2 = BitmapFactory.decodeFile(photoItem.getPathPhoto(),options);
imageView.setImageBitmap(bm2);
对于 Galaxy,ImageView 上的 Orientation 始终相同,对应于 params.setRotation(0)。HTC没问题。
所以我试图在将图片发送到 ImageView 之前查看图片的 exif 标志:
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
奇怪的是,对于 HTC,方向始终为 0 值,而三星方向得到正确的值 (1 3 6 8)。
结论:使用 Galaxy Phones EXIF 方向值是可以的,但 ImageView 上的方向不是很好。
对于 HTC 手机,EXIF 方向值是错误的,但方向是可以的。(wtf?)
感谢您的回答:)
PS:我不想使用矩阵或图像处理的东西,因为我的 CPU/内存资源非常低