java - JPanel 到 BufferedImage

标签 java jpanel bufferedimage

我正在尝试将 JPanel 的内容转换为 BufferedImage。环顾四周后,我得到了这段代码。

    BufferedImage image = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics g = image.getGraphics();
    this.paint(g);

我使用以下代码迭代图像,查找黑色像素。

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 == Color.BLACK){
                System.out.println(tempColor); //Debugging
            }
        }
    }

JPanel 包含许多使用 Color.BLACK 绘制的像素(所以是的,它们是黑色的),尽管运行此代码时,它从不打印调试行。

我相信我的代码中的错误与我将 JPanel 的内容复制到 BufferedImage 的方式有关,我似乎无法弄清楚我做错了什么。非常感谢任何帮助,谢谢。

最佳答案

您在测试 tempColor == Color.BLACK 时正在执行引用相等测试。但是new Color(…)始终创建一个新对象,该对象永远不能与预定义的对象相同 Color.BLACK例如,==检查将始终是 false .

使用equals或者干脆省略处理 Color根本没有对象,只需检查是否 image.getRGB(i, j) == 0或者如果您不想使用零表示黑色,您也可以使用 image.getRGB(i, j) == Color.BLACK.getRGB()

关于java - JPanel 到 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33641563/

相关文章:

java - 使用 TYPE_USHORT_GRAY 在java中读取黑白图像

Java TGA 加载器

java - 使用 JackSon 删除 JSONArray 中的特定数组

java - SQLException:找不到适用于 jdbc:derby 的驱动程序:错误

java - 在java正则表达式中获取组名

java - 将 hibernate 组件映射到单独的表

java - JPanel 图形清除和重新绘制?

JAVA JPanel 不显示图像

Java Swing : JButton creates new JTextField(s)

使用绘制的 bufferedImage 调整 JFrame 大小时 Java 崩溃