安卓2.2会扭曲图片颜色吗?

4
我有一些.png文件在我的应用程序中。我需要在运行时加载它们,并从中获取某些像素的确切颜色。重要的是,我不想对这些图片进行缩放。我不直接将它们显示在UI上,它们充当地图。
在Android 1.5上,这没有问题。我将这些图像放入'/res/drawable'目录中,使用BitmapFactory将其加载到Bitmap对象中,并用它来获取所需像素的颜色。例如,像素(100,50)具有颜色RGB(100,1,100)。
然而,在Android 2.2上,同样的过程会导致颜色变化(对于同一个像素),因此我得到了RGB(99,3,102)/RGB(101,2,99)等相同的(100,50)像素。我检查了Bitmap对象的分辨率,似乎它没有被缩放。
有人能解释一下我为什么会得到扭曲的颜色值吗?
4个回答

2

解决方案:看起来在Android 2.2上,我必须设置正确的位图配置。不知何故,低于2.2版本的系统可以做到这一点(或者可能支持更少的配置,并且系统可以正确猜测配置,我不知道)。

无论如何,这是我现在使用的代码:

BitmapFactory.Options opt = new BitmapFactory.Options();
        opt.inDither=false;
        opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
        Bitmap mask = BitmapFactory.decodeResource(getResources(), R.drawable.picture, opt);

1

创建一个完全与你所关注的像素颜色相同的位图。使这个位图的分辨率与你当前使用的位图相同。加载它并检查你遇到问题的像素(或任何像素)的RGB值。

这应该可以告诉你,你的问题是缩放问题,这就是我认为的,或者可能是颜色转换的问题。


我已经完成了,创建了一个与原图相同大小的位图,并用颜色(100, 22, 100)填充它,加载后尝试获取不同像素的颜色值。即使整个图片都被填充了纯色,我仍然得到了不同的颜色(都接近给定的颜色)... 我错过了什么? - Zsombor Erdődy-Nagy

0

我的2.3设备(Nexus One和S)在没有设置“opt.inPreferredConfig”的情况下工作正常,但似乎2.2需要它才能准确显示RGB色彩。


0

如果您无法快速找到答案,我的实用主义者本性会问一下,自己解析.png文件有多难,以获得完全确定的结果,独立于平台上的任何更改。


没错,但我认为对于这样一个现代化的框架来说,能够加载一个该死的.png文件是一个合理的期望。 - Zsombor Erdődy-Nagy
它可以这样做,但是希望将其加载为数据以供使用的愿望可能与框架实现者明显支持最佳视觉显示(可能包括抖动、反锯齿或其他什么)的愿望不同。很高兴你已经找到了一种使用平台功能的方法。 - Chris Stratton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接