我遇到了一个小问题,我认为,这不会很难。 但不知何故,我想念“不能很难”的部分:)。
我有一个代码,用于读取图像的颜色:
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.four_colors);
//define the array size
rgbValues = new int[bmp.getWidth()][bmp.getHeight()];
//Print in LogCat's console each of one the RGB and alpha values from the 4 corners of the image
//Top Left
for (int j = 0; j < 1000; j++){
for (int k = 0; k < 1000; k++){
Log.i("Pixel Value", "pixel x="+j +k + Integer.toHexString(bmp.getPixel(j, k)));
test = Integer.toHexString(bmp.getPixel(j, k));
}
}
//get the ARGB value from each pixel of the image and store it into the array
for(int i=0; i < bmp.getWidth(); i++)
{
for(int j=0; j < bmp.getHeight(); j++)
{
//This is a great opportunity to filter the ARGB values
rgbValues[i][j] = bmp.getPixel(i, j);
}
}
System.out.println(PixelNumber);
System.out.println(test);
}
这段代码就像一个魅力。 但我试图实现一个if语句,如:
if (color == black){
number++;
}
所以他看到的每个像素都是黑色的,他必须用1增加数字。
我几乎尝试了所有可以做出关于此代码的if语句,但似乎没有任何效果。 那么这段代码中的正确位置和if语句是什么?
也许如果你有更多的时间(如果你不想要的话,不要花太多精力)是否可以检查颜色范围而不是1种颜色,所以它选择所有的绿色。 (与photoshop中的色彩范围相同)。
答案 0 :(得分:1)
getPixel以整数形式返回4 GB的ARGB。您应该做的是撰写您想要计算的颜色(argb Color方法会对您有帮助)并使用getPixel(x, y)
测试此值。
对于黑色,这很容易:
if(Color.BLACK == bmp.getPixel(x, y))
//doit
对于范围,您可以使用green
/ red
/ blue
方法,每个方法都返回该组件的值。如果它不为零,则该像素具有该组件的颜色。
答案 1 :(得分:0)
你可以使用像if这样的条件(rgbValues [i] [j] == Color.BLACK)。
该代码将如下所示。
//get the ARGB value from each pixel of the image and store it into the array
for(int i=0; i < bmp.getWidth(); i++)
{
for(int j=0; j < bmp.getHeight(); j++)
{
//This is a great opportunity to filter the ARGB values
rgbValues[i][j] = bmp.getPixel(i, j);
if(rgbValues[i][j] == Color.BLACK) {
}
}
答案 2 :(得分:0)
Bitmap#getPixel(int, int)
返回int
值,表示给定像素的透明度(alpha)和颜色(rgb)。
黑色的RGB值为(0x00, 0x00, 0x00)
。因此,如果你想测试黑色和忽略alpha值,测试应该是这样的:
if ((rgbValue[i][j] & 0x00ffffff) == 0) {
// this pixel is black
number++;
}
颜色范围非常困难。首先,我们需要 green 的可计算定义(例如)。 绿色非常主观。一旦你掌握了算法,就把它放在一个不同的方法中并进行这样的调用:
if (isGreenish(rgbValue[i][j])) { // magic method
// this pixel is some sort of green
number++;
}