我有以下代码来加载纹理。
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,而BRGA32的.dds图像被报告为RGBA32。然而,.tga图像被正确报告为RGBA32。
可能是什么问题?
答案 0 :(得分:1)
首先,FreeImage_GetColorType返回位图颜色类型(它可能与原始图像不同)。
来自docs:
颜色模型 颜色模型是描述颜色方式的抽象数学模型 表示为数字元组,通常为三个或四个值或颜色分量(例如RGB和CMYK是颜色模型)。 FreeImage主要使用RGB [A]颜色模型 表示内存中的像素。