2010-10-27 35 views
4

我在我的应用程序中有一些.png文件。我需要在运行时加载它们,并从中获取特定像素的确切颜色。重要的是,我不想缩放这些图片。我不直接在用户界面上显示它们,它们用作地图。Android 2.2扭曲图片颜色?

现在,在Android 1.5上,这没有问题。我将这些图像放在'/ res/drawable'目录中,用BitmapFactory将它们加载到Bitmap对象中,并使用它获取所需像素的颜色。例如。像素(100,50)具有RGB(100,1,100)的颜色。 (相同像素),所以我得到RGB(99,3,102)/ RGB(101,2,99)/等相同的(100) ,50)像素。我检查了Bitmap对象的分辨率,似乎没有得到缩放。

有人可以解释一下,为什么我会得到扭曲的颜色值?

回答

1

去让自己一个位图完全相同的像素的颜色。使该位图的大小与当前正在使用的分辨率相同。加载它并检查你遇到问题的同一像素(或任何像素)的RGB值。

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

+0

我做了它,创建了一个大小相同的位图,并用一种​​颜色(100,22,100)填充它,加载它,并尝试获取不同像素的颜色值。我有不同的颜色(都接近指定的颜色),即使整张照片都充满了纯色......我在这里错过了什么? – 2010-10-27 13:26:42

0

如果你没有很快找到答案,我的实用主义者会问你自己解析.png是多么困难,以获得完全确定性的结果而不依赖于平台的任何变化。

+0

的确如此,但我认为这样的现代框架能够加载一个该死的.png是一个合理的期望。 – 2010-10-27 18:33:05

+0

嗯,它可以 - 但是希望将其加载作为数据使用,可能与框架实现者明显希望支持最佳视觉显示(可能包括抖动,反锯齿或者谁知道什么)不同。很高兴你找到了一种方法来实现平台功能。 – 2010-10-27 18:42:04

2

解决:看来,在Android 2.2上,我必须设置正确的位图配置。不知何故,2.2以下的版本设法做到这一点(或者可能配置较少的配置,系统正确猜测配置,不知道)。

不管怎么说,这里是我现在使用的代码:不设置“opt.inPreferredConfig”工作得很好

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

我的2.3设备(Nexus One和S),但现在看来,2.2它需要精确位RGB。