获取像素化图像中的所有颜色

时间:2018-01-12 09:44:35

标签: android image bitmap

我正在使用android studio,我希望获得像素化图像中的所有颜色。我有一个50x50大小的像素化图像。这是图像

enter image description here

我使用该代码读取其中的所有像素。

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.abc);
for(int x=0; x<50; x++){
    for(int y=0; y<50; y++){    
        pixelColor = bmp.getPixel(x,y);
        if(pixelColor == Color.BLACK) {
            //The pixel is black
        }else if(pixelColor == Color.WHITE) {
            //The pixel was white
        }
    }
}

但问题是,图像中还有黑色,而在我的代码中,黑色条件永远不会成真。可能有除红色,绿色或蓝色之外的颜色。如果我可以获得所有颜色的ID,它会很棒,因为我想要提取该图像中的所有颜色。请让我知道我在哪里做错了。谢谢。

3 个答案:

答案 0 :(得分:0)

黑色的概念可能就像是一个非常深灰色的&#39;但对于电脑来说,黑色是没有光线,因此是任何颜色。

简单地说,你在图像中看到的黑色很可能是某种形式的深灰色,因为图像中的像素往往与邻居混合在一起,以创造更平滑的图像。
由于Color.BLACK等于十六进制中的0x000000(0红色,0绿色,0蓝色),因此除了完全黑色外,它不会匹配任何内容。你也必须匹配更深的灰色调;要这样做,看看调色板,并确定你认为哪种灰色足够黑。灰色总是混合了绿色,红色和蓝色,大致相同(例如5红色,6蓝色,4绿色)。然后,只需检查红色/绿色/蓝色部分是否低于您认为足够暗的阈值。

答案 1 :(得分:0)

您可以找到其rgb

int redValue = Color.red(pixelColor);
int blueValue = Color.blue(pixelColor);
int greenValue = Color.green(pixelColor);
然后你就可以找到你的颜色了。

更新1

color = Color.rgb(redValue, greenValue,blueValue);
if(color == Color.BLACK)
    //The pixel is black
}else if(color == Color.WHITE) {
    //The pixel was white
}

答案 2 :(得分:0)

您可以在位图中创建一组所有颜色,稍后使用此列表,例如:

Set<Integer> allColors = new TreeSet<Integer>();
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.abc);
for(int x=0; x<50; x++){
    for(int y=0; y<50; y++){    
        pixelColor = bmp.getPixel(x,y);
        allColors.add(pixelColor);
    }
}
相关问题