FreeImage сообщает о неправильном типе цвета изображения

У меня есть следующий код для загрузки текстур.

PackageTexture AssetImporter::ProcessTexture(const boost::filesystem::path& assetPath, const TextureType textureType)
{
PackageTexture texture;
const std::string filename = assetPath.filename().string();

FREE_IMAGE_FORMAT imageFormat = FreeImage_GetFileType(filename.c_str());
if (imageFormat == FIF_UNKNOWN)
imageFormat = FreeImage_GetFIFFromFilename(filename.c_str());

if (imageFormat == FIF_UNKNOWN || !FreeImage_FIFSupportsReading(imageFormat))
return texture;

FIBITMAP* bitmap = FreeImage_Load(imageFormat, assetPath.string().c_str());
if (!bitmap || !FreeImage_GetBits(bitmap) || !FreeImage_GetWidth(bitmap) || !FreeImage_GetHeight(bitmap))
return texture;

FREE_IMAGE_COLOR_TYPE colorType = FreeImage_GetColorType(bitmap);
uint32_t bitsPerPixel           = FreeImage_GetBPP(bitmap);
uint32_t widthInPixels          = FreeImage_GetWidth(bitmap);
uint32_t heightInPixels         = FreeImage_GetHeight(bitmap);

....

FreeImage_Unload(bitmap);

return texture;
}

Проблема в том, что «colorType» дает мне неправильный тип цвета. Например, .jpg сообщается как rgb24, а это bgr24, а изображение .dds BRGA32 — как RGBA32. Изображение .tga сообщается правильно как RGBA32.

В чем может быть проблема?

1

Решение

Прежде всего FreeImage_GetColorType возвращает тип растрового цвета (он может отличаться от исходного изображения).

Из документов:

Цветовая модель
Цветовая модель — это абстрактная математическая модель, описывающая, как цвета могут быть
представлены в виде наборов чисел, обычно в виде трех или четырех значений или цветовых компонентов (например, RGB и CMYK — это цветовые модели). FreeImage в основном использует цветовую модель RGB [A] для
представляют пиксели в памяти.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]