Объяснение пикселя заголовка в GIMP создан файл заголовка C изображения XPM
В 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;
}
Но это на самом деле не помогло мне понять, что происходит со всеми битами, сдвигающимися и побитовыми, или "почему минус 33?" и так далее. Если кто-то может дать объяснение того, что происходит с данными изображения в заголовке, это будет очень цениться.
Заранее спасибо!