Java > 在现有图像上绘制多个矩形

标签 java awt

我正在根据像素比较两个图像,并且需要在不匹配的像素值周围绘制一个矩形。它正确地围绕第一个不匹配的像素绘制矩形,但在病房上却没有。

for (int row = 0; row < height; row++) {  
    for (int col = 0; col < width; col++) {  
        result[row][col] = img1.getRGB(col, row);  
        result1[row][col] = img2.getRGB(col, row);  
        if(result[row][col] != result1[row][col]){  
         try {  
            g.drawImage(temp, 0, 0, null);  
            g.setColor(Color.red);  
            g.setStroke(new BasicStroke(2.0F));  
            g.drawRect(col-5, row-12, 35, 35);  
            } finally {  
            g.dispose();  
            }  
        }  
    }  
}  

最佳答案

  • g.drawImage(temp, 0, 0, null); 将绘制之前绘制的任何内容,这在循环中不是一个好主意
  • g.dispose 可以防止将来任何内容被更新/绘制到上下文中。你真的应该只在完全完成后才调用它

作为快速测试,我将以下图像作为输入......

img1 img2

运行它...

BufferedImage img1 = ImageIO.read(new File("..."));
BufferedImage img2 = ImageIO.read(new File("..."));

int width = img1.getWidth();
int height = img1.getHeight();

BufferedImage temp = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = temp.createGraphics();
g.drawImage(img1, 0, 0, null);

for (int row = 0; row < height; row++) {
    for (int col = 0; col < width; col++) {
        int result = img1.getRGB(col, row);
        int result1 = img2.getRGB(col, row);
        if (result != result1) {
                g.setColor(Color.red);
                g.setStroke(new BasicStroke(2.0F));
                g.drawRect(col - 5, row - 12, 35, 35);
        }
    }
}
g.dispose();

JOptionPane.showMessageDialog(null, new ImageIcon(temp));

哪个输出...

Result

关于Java > 在现有图像上绘制多个矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44455390/

相关文章:

java - 如何使用 Java 漂亮地打印现有的 JSON 数据?

java - 应用程序按电源按钮崩溃

java - 销毁类的实例,然后再次创建它的实例

java - 在这种情况下我应该使用什么布局?

java - 实现游戏同时击键

java - KeyListener - 忽略按住时释放的键(Ubuntu,...)

java - PMD Eclipse 插件

Java: "? extends I"无法转换为 "? extends I"

java - 为什么带有未初始化成员变量的类在java中可以编译?

java - 如何使用 Java Swing 编写肮脏的丰富渐变边框