Android的颜色在手机上是“混合”的,在平板电脑上是纯色的

Android的颜色在手机上是“混合”的,在平板电脑上是纯色的,android,colors,Android,Colors,我有一个简单的基于位图的填充算法,它采用一种颜色并用这种颜色填充位图的一个区域。我看到的问题是,在我的手机HTC Evo 4G上,当算法填充位图时,它实际上放置了不同颜色的像素,而在Galaxy Tab 10.1上,相同的代码在整个区域放置了一种颜色。一些代码会让这更清楚 Bitmap dst = ... int replacementColor = Color.GRAY; //Color.DKGRAY and Color.LTGRAY also show the issue dst.setP

我有一个简单的基于位图的填充算法,它采用一种颜色并用这种颜色填充位图的一个区域。我看到的问题是,在我的手机HTC Evo 4G上,当算法填充位图时,它实际上放置了不同颜色的像素,而在Galaxy Tab 10.1上,相同的代码在整个区域放置了一种颜色。一些代码会让这更清楚

Bitmap dst = ...
int replacementColor = Color.GRAY; //Color.DKGRAY and Color.LTGRAY also show the issue

dst.setPixel(x, y, replacementColor);
if(dst.getPixel(x, y) != replacementColor)
{
    //Only gets triggered on the HTC Evo, not the Galaxy Tab
    Log.d("Pixels don't match");
}
如果我拍摄设备的屏幕截图并放大,您可以清楚地看到Evo上的棋盘格图案,以及Galaxy选项卡上的纯色

我确信这是一个众所周知的图形问题,但我不知道如何以及是否能够解决这个问题的正确术语。当我第二次尝试填充该区域时,问题出现了——我的算法是匹配颜色,只填充相同颜色的区域,但在手机上填充灰色后,我没有相同颜色的实心区域,因此算法不会填充整个区域


有没有办法在Evo上强制使用纯色,或者识别出这个问题正在发生,以便第二次适当填充该区域?也许我需要看看相邻的像素,然后平均颜色?

抖动确实是罪魁祸首,正如rsutphin提到的。事实证明,我填充的位图有一个RGB_565的Bitmap.Config。复制这些位图并将配置设置为ARGB_8888修复了此抖动问题

Bitmap bmp = orig.copy(Bitmap.Config.ARGB_8888, true);

谢谢

听起来像。我不知道Android或这些设备的具体情况,但一般来说,抖动是一种尝试,试图近似一种无法使用可用调色板准确再现的颜色。您需要像素级精度吗?你能在位图中画一个彩色矩形吗?是因为你设置了错误的像素密度而进行反走样吗?我再次意识到这个问题,除非你的位图有alpha通道,使用Bitmap.createBitmap的形式,如果无法专门设置配置,将导致设置RGB_565的配置-因此,请确保可以在位图上设置此值,或者位图具有alpha通道。