Это простой вопрос, но я не могу найти ответ где-нибудь в документации. Я знаю, что FreeImage поддерживает 1, 4, 8, 16, 24, and 32+ bit
изображений. Но кроме того, в документации упоминается, что 16 bit
изображения могут быть в любом 555
или же 565
формат. Я хотел бы знать, в каких форматах хранятся другие битовые глубины изображения? или если форматы произвольны, есть ли способ динамически извлечь формат из библиотеки FreeImage?
Очень легко определить режим 555 против 565 в FreeImage:
unsigned red_mask, green_mask, blue_mask;
red_mask = FreeImage_GetRedMask(dib);
green_mask = FreeImage_GetGreenMask(dib);
blue_mask = FreeImage_GetBlueMask(dib);
if (FreeImage_GetBPP(dib) == 16)
{
if ((red_mask == FI16_565_RED_MASK) &&
(green_mask == FI16_565_GREEN_MASK) &&
(blue_mask == FI16_565_BLUE_MASK))
{
// We are in RGB16 565 mode
}
else
{
// We are in RGB16 555 mode
}
}
И вы всегда можете использовать FreeImage_ConvertTo16Bits555()
а также FreeImage_ConvertTo16Bits565()
функции для преобразования в формат, который вы хотите.
Других решений пока нет …