我正在研究一种图像冲突机制,该机制使用长值作为每个图像的位掩码,如果不排除像素(在大多数情况下是透明的),则将每个位设置为 1,否则设置为 0。我编写了一个测试方法,将位掩码作为 1 和 0 写入文本文件。在我看来,理论上,因为图像是逐行读取的,所以 1 和 0 应该类似于图像本身。
这不是我真正得到的。是我的位分配代码或打印代码有问题吗?或者它应该看起来像那样?
图像解析
int[] data = ColorUtils.getImageData(img);
bounds = new Rectangle(img.getWidth(), img.getHeight());
int wt = (int) bounds.getWidth();
int ht = (int) bounds.getHeight();
bitmasks = new long[ht];
for(int y = 0; y < ht; y++) {
long bitmask = 0;
for(int x = 0; x < wt; x++) {
if(data[x + y * wt] != excludedColor)
bitmask = (bitmask << 1) + 1;
else
bitmask = bitmask << 1;
}
bitmasks[y] = bitmask;
}
文件打印
PrintWriter pw = null;
try {
pw = new PrintWriter(new File("/home/brian/Desktop/imageModel.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
}
for(int y = 0; y < bounds.getHeight(); y++) {
long bitmask = bitmasks[y];
for(int x = 0; x < bounds.getWidth(); x++) {
pw.print(String.valueOf((bitmask >> (x + y * (int) bounds.getWidth())) & 1));
}
pw.println();
pw.println();
}
pw.close();
图片:
生成的文本文件: 查看