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