【问题标题】:get all colors in a pixelated image获取像素化图像中的所有颜色
【发布时间】:2018-01-12 09:44:35
【问题描述】:

我正在使用 android studio,我想在像素化图像中获取所有颜色。我有一个 50x50 大小的像素化图像。这是那张图片

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

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,那就太好了,因为我想提取该图像中的所有颜色。请让我知道我在哪里做错了。谢谢。

【问题讨论】:

  • 你成功在屏幕上绘制了一个图像像素吗?
  • 我没有画任何东西,我只需要像素化图像中的颜色

标签: android image bitmap


【解决方案1】:

您可以找到它的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】:

黑色的概念可能类似于“非常深的灰色”,但对于计算机而言,黑色是没有光的,因此是任何颜色。

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

【讨论】:

    【解决方案3】:

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

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-21
      • 2019-07-27
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      相关资源
      最近更新 更多