私は、各画像のビットマスクとして長い値を使用し、ピクセルが除外されていない場合は各ビットを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();
画像:
作成されたテキストファイル: 表示