我已经看到了关于这个话题的几个问题,但是没有解决那我的问题。ImageView的位图方向不正确
我动态创建ImageViews,并允许用户采取/添加项目的照片清单。下面的代码存在生成位图和填充的ImageView:
protected void addPhotosToView(ArrayList<String> uris) {
for (String uriString : uris) {
try {
Uri uri = Uri.parse(uriString);
File imageFile = new File(uri.getPath());
int orientation = resolveBitmapOrientation(imageFile);
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
bitmap = applyOrientation(bitmap, orientation);
ImageView image = new ImageView(ItemActivity.this);
int h = 100; // height in pixels
int w = 100; // width in pixels
Bitmap scaled = Bitmap.createScaledBitmap(bitmap, h, w, true);
image.setImageBitmap(scaled);
LinearLayout photoLayout = (LinearLayout) findViewById(R.id.itemPhotoLayout);
photoLayout.addView(image);
addClickListener(image, uri);
} catch (Exception e) {
e.printStackTrace();
}
}
}
但是一旦图像添加或采取一些图像显示了错误的方向。纵向存储在手机中的一些照片以纵向显示,而其他照片则呈现横向显示。风景照片同样是任意的。
这似乎并非要在
正如你可以在代码中看到,我试图让所有的设备(即我看到这对设备是三星S4)发生/应用使用方向变化EXIF标签,但我总是与该设备的定位越来越0并没有看到该请求解决问题的任何答案时,方向始终是0
我期待尽快出货这个软件,并且需要某种解决方法或解决方案,所以我愿意接受从Uris /字符串到动态水平滚动的正确图像列表的其他方式,如果这不能以其他方式解决的话。
看起来像我面临的exif方向问题我通过解码位图和检查EXIF方向来解决它。如果exif数据方向存在,则位图会相应地旋转 –
我相信@IllegalArgument是正确的。但是请张贴'resolveBitmapOrientation()'和'applyOrientation()'代码(仅从他们的名字来判断,似乎你已经考虑到了这一点 - 也许它们在某些情况下失败了?)。 – matiash