使用Bitmap时android中的图像尺寸不正确

时间:2012-01-13 17:57:21

标签: android

我将.png图像文件存储为我的Android应用程序中的资源。 在我的代码中,我从该图像分配了新的Bitmap实例,如下所示:

Bitmap img = BitmapFactory.decodeResource(getResources(), R.drawable.imgName);

但是当我使用getWight()和getHeight()方法从Bitmap对象读取图像尺寸时,

int width = img.getWidth();
int height = img.getHeight();

我从原始图像得到的结果不同......有人可以解释一下我缺少什么,以及如何检索图像尺寸?

(我的项目符合android 2.2 - API 8)

编辑: 好的 - 找到了如何获得真实尺寸: 将inJustDecodeBounds类的BitmapFactory.Options属性设置为true,如下所示:

BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(getResources(), R.drawable.imgName, options);
    width = options.outWidth;
    height = options.outHeight;

现在的问题是,当我们发送Options参数时解码器返回null,所以我需要像之前那样再次解码(没有Options参数...)来检索{{1}实例-bizarre,不是吗?

2 个答案:

答案 0 :(得分:10)

要获得确切的资源图像使用:

    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;

答案 1 :(得分:4)

Android会根据不同的密度(以某种方式针对不同的屏幕分辨率和尺寸)缩放图像。在drawable-ldpi,drawable-hdpi,drawable-xhdpi,drawable文件夹中放置一个单独的图像副本。