古いPCゲームからいくつかのスプライトをリッピングしようとしています。私はスプライトを見つけ、それらをグレースケールで個々のファイルにリッピングしました。今私は色付けする方法を工夫しています。実行可能ファイルやそのデータファイルにパレットデータがないように見えます。これは、ゲームに必要な色数(256色)と組み合わせると、実際には各バイトが8ビットトゥルーカラー値であると信じられます。バイト配列から8ビットトゥルーカラーイメージへ
12 11 12 11
0A 13 12 11
13 12 11 0A
12 11 13 13
I画像を書き込むために使用しているものと同様のいくつかのサンプルコードは、そうのように見える:
DataInputStream dis = new DataInputStream(new FileInputStream("GAME.EXE"));
dis.skipBytes(bytesToImage);
BufferedImage bufferedImage = new BufferedImage(columns, rows, BufferedImage.TYPE_BYTE_INDEXED);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
byte pixel = dis.readByte();
System.out.print(toHexString(pixel));
//For now, greyscale everything.
int value = pixel << 16 | pixel << 8 | pixel;
bufferedImage.setRGB(j, i, value);
}
System.out.print(System.getProperty("line.separator"));
}
ImageIO.write(bufferedImage, "PNG", new File("test.png"));
のような見えるアレイI(この場合には短く)していると言います
私は、コンストラクタに渡されたimageTypeとColorModelを手動で渡していたのですが、どちらも役に立ちません。バイナリのANDをピクセルで行い、ビットシフトするとほとんどがイメージを濃い赤色に設定します。
この場合、各ピクセルを正しいトゥルーカラー値に設定するにはどうすればよいですか?
私はすでにこれを試しています - バイト - > intカラー値からの変換のため、すべてが青色です(th下位ビットがセットされます)。 – HunterP
ええ、そうです。ドキュメントには「8ビットコンポーネント」と書かれていて、色ごとに8ビットの代わりに8ビットを使ってRGBを格納するという意味でした。 – NullUserException