Растровый инвертированный цвет

Некоторое время назад я задал вопрос о сохранении hwnd в файл ppm. Благодаря пользователю stackru я решил свою проблему. Iy работает правильно, но у меня все еще есть проблема: красный и синий цвета инвертированы.

код и мой предыдущий вопрос, где здесь: от hwnd до ppm

Вот данные растрового изображения:

bi.biSize = sizeof(BITMAPINFOHEADER);    
bi.biWidth = w;    
bi.biHeight = -h;  
bi.biPlanes = 1;    
bi.biBitCount = 24;    
bi.biCompression = BI_RGB;    

bi.biSizeImage = 0;  
bi.biXPelsPerMeter = 0;    
bi.biYPelsPerMeter = 0;    
bi.biClrUsed = 0;    
bi.biClrImportant = 0;

Я гуглил, и, похоже, проблема в BI_RGB, и я должен использовать BI_BITFIELDS ... но я не нашел документации о том, как его использовать. И я действительно не хочу читать все данные попиксельно, чтобы вернуть синий и красный цвета. Есть ли способ сделать это, не делая это попиксельно?

Заранее спасибо за помощь

1 ответ

Решение

В BMP 24bpp пиксели хранят свои цвета в порядке наименьшего порядка байтов. Синий - первый, красный - последний. В PPM красный - первый, синий - последний. Что во многом объясняет, почему это такой неясный формат изображений в Windows. Вам придется поменять порядок хранения самостоятельно.

Другие вопросы по тегам