1

我有以下代码来加载纹理。

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。

可能是什么问题?

4

1 回答 1

0

首先 FreeImage_GetColorType 返回位图颜色类型(它可能与原始图像不同)。

来自文档:

颜色模型 颜色模型是一种抽象的数学模型,描述颜色可以表示为数字元组的方式,通常为三个或四个值或颜色分量(例如,RGB 和 CMYK 是颜色模型)。FreeImage 主要使用 RGB[A] 颜色模型来表示内存中的像素。

于 2013-11-03T18:16:33.497 回答