Android 计算位图大小的方法?

Android 计算位图大小的方法?,android,Android,我试图找到我的图像的大小,但不加载到内存中。我使用流动代码 BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeResource(a.getResources(), R.drawable.icon, o); int width1 = o.outWidt; int height1 = o.outHeight; 现在,我做一些比较:

我试图找到我的图像的大小,但不加载到内存中。我使用流动代码

BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeResource(a.getResources(), R.drawable.icon, o);
int width1 = o.outWidt;     
int height1 = o.outHeight;
现在,我做一些比较:

Bitmap icon = BitmapFactory.decodeResource(a.getResources(), R.drawable.icon);
int width = icon.getWidth();
int height = icon.getHeight();

为什么width、height不等于width1和height1?

我不确定是怎么回事,但可能是BitmapFactory在实际返回位图时(如上所述)应用了密度缩放,而不是在解码位图大小时。(如果是这样的话,我会考虑提交一份bug报告。)< /P>
您可以通过将图像从
drawables
目录移动到
drawables nodpi
来测试这一理论,我几乎可以肯定这是因为使用decode从资源中引用图像时,图像的密度是预先缩放的


在文档上签出#1:

这两个选项中哪一个是正确的图像大小?{width,height}或{width1,height1}图像的原始大小为width1和height1。可能正在根据dpi调整图像的大小。。这就是为什么我总是使用BitmapFactory.Options加载图像,inScaled=false。您应该能够检查两个位图的dpi并比较它们。检查它们是否不同“不加载到内存”是什么意思?仅仅因为你没有显示它并不意味着它不在内存中,这是有意义的。根据dpi文件夹调整图像大小。我的图像在drawable hdpi文件夹中,这意味着我需要除以1.5f才能达到图标位图的大小,对吗?