我正在尝试将给定像素与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是从相机拍摄的位图图像。
答案 0 :(得分:1)
首先,使用LogCat打印注释和变量。 (Eclipse - > Window - > Show View - > Android - > LogCat。 然后你应该在日志中看到错误。
这将有助于我们找到错误。
答案 1 :(得分:0)
我不知道你正在使用的像素格式的细节,但是你试图将颜色的32位整数表示(最有可能是ARGB格式)与Color类型的对象进行比较。在将它与getPixel()的结果进行比较之前,您需要首先获取Color对象的ARGB表示(可能通过调用Color.getRGB())。
答案 2 :(得分:0)
对于“黑色”图像:您需要另一个测试图像。用相机拍照永远不会给你一张真正的黑色照片。因此,找到真正的黑色像素也很难。
(只需添加一个调试语句即可打印c
的值以验证该值。对于Color.BLACK
您should 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