我正在尝试将JPanel的内容转换为BufferedImage。环顾四周之后我得到了这段代码。
<html>
<body>
<script>
username = prompt("Please enter a your username:");
for (var i = 0; i < username; i++) {
if(isFinite(username.charAt(i))) {
result = true;
document.write("The username consists of one or more numbers." + BR);
}
else {
result = false;
document.write("The username must consist of one or more numbers." + BR);
}
}
</script>
</body>
</html>
我遍历图像,使用以下内容查找黑色的像素。
BufferedImage image = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
this.paint(g);
JPanel包含许多使用Color.BLACK绘制的像素(所以它们是黑色的),尽管在运行此代码时,它从不打印调试行。
我相信我的代码中的错误与我将JPanel的内容复制到BufferedImage的方式有关,我似乎无法弄清楚我做错了什么。非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
在测试tempColor == Color.BLACK
时,您正在执行参考相等测试。但是new Color(…)
始终会创建一个新对象,该对象永远不会是与预定义Color.BLACK
实例相同的对象,因此==
检查将始终为false
。
使用equals
或完全忽略处理Color
个对象,只检查image.getRGB(i, j) == 0
或者如果您不想使用零作为黑色,您也可以使用{ {1}}
答案 1 :(得分:0)
感谢@Holger的回答。
for(int i = 0; i < image.getWidth(); i++){
for(int j = 0; j < image.getHeight(); j++){
Color tempColor = new Color(image.getRGB(i, j));
if(tempColor.equals(Color.BLACK)){ // Error was here
System.out.println(tempColor); //Debugging
}
}
}
最初我有代码
if(tempColor == Color.BLACK)
而不是
if(tempColor.equals(Color.BLACK))
我必须首先评估为false,这是错误。