【发布时间】:2014-06-17 07:22:00
【问题描述】:
我正在尝试编写一个程序,将旧 GBA 游戏的地图划分为 16x16 的图块,保存每个图块,然后将每个抓取的图块的原始图像数据与另一个保存的图块列表进行比较,并自动确定它是否是相同的图像。到目前为止,我已经成功地将地图划分为 16x16 的图块,自动将每个 16x16 的图块保存到一个新的图像文件中,然后将所有这些图像文件作为 BufferedImages 加载到一个数组中。
public TileSorter()
{
for (int a = 0; a < 1269; a++)
{
try {
img[a] = ImageIO.read(new File("img" + a + ".jpg"));
} catch (IOException e) {}
System.out.println("img" + a + ".jpg loaded into Array.");
}
}
我现在要做的是分析一个数组中每个图块(BufferedImage)的原始数据,并确定它是否与另一个数组中保存的任何 BufferedImage 图块相同。 我四处寻找答案并尝试了 getRGB() 方法和 getData() 栅格方法:
img[a].getRGB(0,0,16,16,rawImgData[a],0,0);
rawImgData[a] = ((DataBufferByte) img[a].getRaster().getDataBuffer()).getData();
问题是:据我所见,从这些方法返回的 byte[] 和 int[] 数据对于任何两张完全相同的图片都不相同。我需要一种将图像数据转换为可用于比较两张完全相同的图片的原始 int[] 或 byte[] 数据的方法。 (IE;如果两张图片都只是一个 16x16 的黑色像素数组,它们应该输出相同的 getRGB() 或 getData() 值。) 有没有一种方法可以用来将这些 BufferedImage 转换为可以轻松相互比较的原始图像数据?
任何建议将不胜感激,谢谢。
【问题讨论】: