Загрузка изображений с прозрачностью под FreeImage
Я успешно использую классную библиотеку FreeImage для загрузки изображений в различных форматах.
Среди них GIF и PNG с прозрачностью информации.
После загрузки изображений я конвертирую их в 32bpp используя FreeImage_ConvertToRawBits
, С моими png-изображениями это работает нормально, и я могу получить все четыре компонента Red/Green/Blue/Alpha со значимыми значениями Alpha.
С изображениями GIF, напротив, Альфа-плоскость остается все 255, хотя FreeImage_IsTransparent
говорит правда.
Что мне не хватает? Связано ли это с тем, что GIF-файлы палитрированы? Как мне справиться с этим?
1 ответ
Я нашел четкий ответ, посмотрев на исходный код: прозрачность не обрабатывается при преобразовании палитризованного изображения в 32 бита. Поле Alpha всегда установлено на 255.
В любом случае, вполне возможно получить прозрачность из исходного растрового изображения с палитрой, пиксель за пикселем, зная значение прозрачного цвета (FreeImage_GetTransparentIndex(dib)
).