【发布时间】:2013-12-15 15:10:54
【问题描述】:
我做了一个自定义的相机应用程序,我想在 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,orientation 总是为 0 值,而对于三星,orientation 得到了正确的值 (1 3 6 8)。
结论: Galaxy Phones 的 EXIF 方向值可以,但 ImageView 上的方向不好。
对于 HTC 手机,EXIF 方向值是错误的,但方向是可以的。 (wtf?)
感谢您的回答:)
PS:我不想使用矩阵或图像处理的东西,因为我的 CPU/内存资源非常低
【问题讨论】:
标签: android android-camera android-imageview exif android-bitmap