Растровый инвертированный цвет
Некоторое время назад я задал вопрос о сохранении 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. Вам придется поменять порядок хранения самостоятельно.