4
在GIMP中,您可以將圖像另存爲C頭文件。我與XPM文件,它看起來像下面的圖片就如此GIMP中頭文件像素的解釋創建XPM圖像的C頭文件
如果我的XPM圖像保存爲一個C頭文件,GIMP將輸出this C header file。
爲了處理給定圖像數據的每個像素,標題像素被重複調用。我不明白的是標題像素處理數據的原因。
#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; \
}
當我看到它在使用中another person's code,他們說的字節順序是錯誤的順序,並重新安排它自己。他們用這樣的:
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;
}
但是這並沒有真正幫助我明白是怎麼回事了所有的位移位和位或的和「爲什麼零下33?」等等。如果任何人都可以解釋處理頭部中圖像數據的過程,那將非常感激。
在此先感謝!
ASCII 33是'!'。我會猜測它的base64或類似的東西 – 2012-01-16 02:50:48