使用位图时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.OptionsinJustDecodeBounds属性为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文件夹中放置图像的单独副本。

+0

谢谢您的回答,但你知道,如果有一个获得“真实”图像尺寸的方法? – 2012-01-13 18:30:45

+0

@ET最简单的方法是对它进行硬编码。无论如何,你会知道你已经放入可绘制文件夹的图像的大小。坦率地说,我还没有试图得到真正的大小 – manjusg 2012-01-13 18:41:52

+1

我不能使用这种解决方案,因为图片是非常动态的,他们可能会在未来从Web服务检索。此外 - 我有很多图片:) – 2012-01-13 19:17:28

为了得到准确的资源使用的图像:

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; 
+0

可能不是OP正在寻找的东西,但它确实帮了我很多,谢谢。 – r41n 2014-06-25 13:12:53

+0

非常感谢你这对我来说非常有用! – noobcoder 2015-02-19 09:59:27