我正在尝试在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);
但是,如果我取消注释两个注释行,代码将按预期工作。我怀疑它与需要刷新的缓冲区有关。我试图冲洗图像对象,但没有运气。如果有人能够了解正在发生的事情,以及如何在不将图像写入磁盘的情况下使其工作,那么请将其读回来,那真是棒极了。
答案 0 :(得分:1)
保存/加载后图像仅相同的原因是因为之后,两个图像都受到(有损)jpeg转换的影响。在此之前,写入base_image的文本尚未被转换为&#34;。