GIMP では、画像を C ヘッダー ファイルとして保存できます。以下の画像のような XPM ファイルを使用してこれを行いました。
XPM イメージを C ヘッダー ファイルとして保存すると、GIMP はこの C ヘッダー ファイルを出力します。
与えられた画像データの各ピクセルを処理するために、ヘッダー ピクセルが繰り返し呼び出されます。私が理解していないのは、ヘッダー ピクセルが最初にデータを処理するために行うことです。
#define HEADER_PIXEL(data,pixel) {\
pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \
pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \
pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \
data += 4; \
}
別の人のコードで使用されているのを見たとき、彼らはバイトオーダーが間違った順序であると述べ、自分で再配置しました。彼らはそれを次のように使用しました:
char *pixel, *data = header_data;
int i = width * height;
*processed_data = pixel = malloc(i * 4 + 1);
while(i-- > 0) {
pixel[0] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33)));
pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2));
pixel[2] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4));
pixel[3] = 0;
data += 4;
pixel += 4;
}
しかし、それは、すべてのビットシフトとビットごとの or と「なぜマイナス 33 なのか」で何が起こっているのかを理解するのに本当に役立ちませんでした。など。ヘッダーの画像データに何が処理されているかについて誰かが説明できれば、それは大歓迎です。
前もって感謝します!