У меня есть следующий код для загрузки текстур.
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.
В чем может быть проблема?
Прежде всего FreeImage_GetColorType возвращает тип растрового цвета (он может отличаться от исходного изображения).
Из документов:
Цветовая модель
Цветовая модель — это абстрактная математическая модель, описывающая, как цвета могут быть
представлены в виде наборов чисел, обычно в виде трех или четырех значений или цветовых компонентов (например, RGB и CMYK — это цветовые модели). FreeImage в основном использует цветовую модель RGB [A] для
представляют пиксели в памяти.
Других решений пока нет …