比较图像中的两种颜色?

时间:2011-01-23 21:56:47

标签: java android image colors

我正在尝试将给定像素与Color.BLACK进行比较。但问题是所有图像都会产生错误。 (我做了一个黑色图像,它也返回了假!)

public int isItBlackOrWhite(int x , int y)
{
     int c = bimg.getPixel(x, y);   
     if(c == Color.BLACK)
         {System.out.println("Helooo");return 0;}    
     else
      return 1;
}

此外,我尝试将其与Color.White进行比较,但应用程序退出并强制关闭!

public int isItBlackOrWhite(int x , int y)
{
     int c = bimg.getPixel(x, y);   
     if(c == Color.WHITE)
         {System.out.println("Helooo");return 0;}    
     else
      return 1;
}

注意:bimg是从相机拍摄的位图图像。

6 个答案:

答案 0 :(得分:1)

首先,使用LogCat打印注释和变量。 (Eclipse - > Window - > Show View - > Android - > LogCat。 然后你应该在日志中看到错误。

这将有助于我们找到错误。

答案 1 :(得分:0)

我不知道你正在使用的像素格式的细节,但是你试图将颜色的32位整数表示(最有可能是ARGB格式)与Color类型的对象进行比较。在将它与getPixel()的结果进行比较之前,您需要首先获取Color对象的ARGB表示(可能通过调用Color.getRGB())。

答案 2 :(得分:0)

对于“黑色”图像:您需要另一个测试图像。用相机拍照永远不会给你一张真正的黑色照片。因此,找到真正的黑色像素也很难。

(只需添加一个调试语句即可打印c的值以验证该值。对于Color.BLACKshould get -16777216或十六进制0xff000000。)

答案 3 :(得分:0)

Color.BLACK是Color但不是int。在比较之前,您需要将它们转换为相同的类型。

答案 4 :(得分:0)

丑陋的解决方案,但下面的答案并没有给出问题的实际解决方案。试试这个:

Color white = new Color(0,0,0); // for white
Color black = new Color(255,255,255); // for black
if(yourPixel.equals(white)) { // operate }

你也可以创建一个Color Constants类并相应地使用它,我想你可以从互联网上找到一个。如果您愿意实施该课程RGB value of colors

答案 5 :(得分:-1)

问题可能是你对==的使用,它没有你想要的意思。在java中,它检查两个对象是否是同一个对象,并且从图片中获得的颜色永远不会等于Color.BLACK中记录的值

您要做的是检查颜色的值是否相同,红色,绿色,蓝色和Alpha通道。这是一个依赖于上下文的相等,通常实现为对象的.equals()函数。

试试这个:

c.equals(Color.BLACK)

而不是

c == Color.BLACK
相关问题