使用位图时Android中的图像尺寸不正确
问题描述:
我在我的android应用程序中将have.png图像文件存储为资源。 在我的代码,我从图像如下allocationg新Bitmap实例:使用位图时Android中的图像尺寸不正确
Bitmap img = BitmapFactory.decodeResource(getResources(), R.drawable.imgName);
但是,当我读了位图对象使用getWight()和getHeight()方法,图像尺寸,
int width = img.getWidth();
int height = img.getHeight();
我从原始图像中得到了不同的结果......有人可以解释我缺少什么,以及如何检索图像大小?
(我的项目是符合了Android 2.2 - API 8)
编辑: 好吧 - 发现了如何获得真正的维度: 设置BitmapFactory.Options
类inJustDecodeBounds
属性为true如下:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.imgName, options);
width = options.outWidth;
height = options.outHeight;
的问题是,解码器,当我们发送Options
参数返回空值,所以我需要再次解码像以前一样(不Options
参数...)来检索Bitmap
例如-bizarre,是不是?
答
Android会根据不同的密度(针对不同的屏幕分辨率和尺寸)缩放您的图像。在drawable-ldpi,drawable-hdpi,drawable-xhdpi,drawable文件夹中放置图像的单独副本。
答
为了得到准确的资源使用的图像:
BitmapFactory.Options o = new Options();
o.inScaled = false;
Bitmap watermark = BitmapFactory.decodeResource(context.getResources(), id, o);
这将关闭自动屏幕密度缩放。
更新: 我相信你现在已经意识到了这一点,但是在JustDecodeBounds就是这么做的,它找到了尺寸。你不会得到一个图像。该选项通常用于执行自定义缩放。你最终会调用decodeResource两次,第二次时间设定:
options.inJustDecodeBounds = false;
,使任何选项调整基于您:
width = options.outWidth;
height = options.outHeight;
谢谢您的回答,但你知道,如果有一个获得“真实”图像尺寸的方法? – 2012-01-13 18:30:45
@ET最简单的方法是对它进行硬编码。无论如何,你会知道你已经放入可绘制文件夹的图像的大小。坦率地说,我还没有试图得到真正的大小 – manjusg 2012-01-13 18:41:52
我不能使用这种解决方案,因为图片是非常动态的,他们可能会在未来从Web服务检索。此外 - 我有很多图片:) – 2012-01-13 19:17:28