JPanel到BufferedImage

时间:2015-11-10 23:21:32

标签: java jpanel bufferedimage

我正在尝试将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的方式有关,我似乎无法弄清楚我做错了什么。非常感谢任何帮助,谢谢。

2 个答案:

答案 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,这是错误。