2017-06-09 18 views
0

2つの画像をそのピクセルに基づいて比較しており、一致していないピクセル値の周囲に矩形を描く必要があります。これは正しくない最初のピクセルの周りに矩形を描画しますが、そこにはありません。Java>既存の画像に複数の矩形を描画する

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(); 
      } 
     } 
    } 
} 
+0

ループを開始する前に 'g.drawImage(temp、0、0、null); 'という画像を描画します。そうしないと、既に行ったすべての作業に画像が描画されます。 – MadProgrammer

+0

そして、あなたがそれを完了するまで、 'Graphics'コンテキスト – MadProgrammer

答えて

1
  • g.drawImage(temp, 0, 0, null);は/更新将来のコンテキストに塗装されてから何かを防ぐことができ、あなたのループ
  • g.dispose内で以前に描かれたものではなく、良いアイデアを上に描画します。あなたが完全に簡単なテストとして

をやっているときは、本当に唯一の私は、入力として以下の画像を取り、それを呼び出す必要があります...

img1img2

はそれを駆け抜けた...

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

+0

ありがとうございます:) –

関連する問題