BufferedImageの上にテキストを書き込もうとしていて、同じ画像とピクセル単位で比較しています。ただし、比較は常に失敗します。私のコードは次のようになります。BufferedImageに変更を適用
BufferedImage referenceImage = ImageIO.read(new File("reference.jpg"));
BufferedImage image = ImageIO.read(new File("base_image.jpg"));
image.createGraphics().drawString("hello world", 10, 10);
//ImageIO.write(image, "jpg", new File("newimage.jpg"));
//image = ImageIO.read(new File("newimage.jpg"));
assertEquals(image.getWidth(), referenceImage.getWidth());
assertEquals(image.getHeight(), referenceImage.getHeight());
boolean identicalImages = true;
for (int x = 0; x < image.getWidth(); x++) {
for (int y = 0; y < image.getHeight(); y++) {
if (image.getRGB(x, y) != referenceImage.getRGB(x, y)) {
identicalImages = false;
}
}
}
assertTrue(identicalImages);
ただし、2つのコメント行のコメントを外すと、コードは期待通りに機能します。私はそれがフラッシングを必要とするバッファと関係していると疑っています。私はイメージオブジェクトをフラッシュしようとしましたが、運はありません。もし誰かが何が起こっているのか、それをディスクに書き込んだり、それを読んだりすることなく、それを稼働させる方法があれば、それはすばらしいでしょう。
'BufferedImage#createGraphics'の結果を変数に代入し、終了したら' Graphics#dispose'を呼び出す - 違いが出るかどうかは分かりませんが、最初の2行に同じファイルを読み込むとどうなりますか? – MadProgrammer
最初の2行に同じファイルを読み込むとどうなりますか? –
多分文字列youre drawingは画像の背景と同じ色です –