我正在根据像素比较两个图像,并且需要在不匹配的像素值周围绘制一个矩形。它正确地围绕第一个不匹配的像素绘制矩形,但在病房上却没有。
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
可以防止将来任何内容被更新/绘制到上下文中。你真的应该只在完全完成后才调用它
作为快速测试,我将以下图像作为输入......
运行它...
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));
哪个输出...
关于Java > 在现有图像上绘制多个矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44455390/