QImage:加载图像时自动检测格式

时间:2018-07-11 03:36:21

标签: c++ qt qt5 qimage

我有一个扩展名为.jpg的图像,但它以png格式存储。当我使用QImage加载该图像时,它返回无效的QImage

QImage image (path);
if (image.isNull())
{
    //it enters here
}

在加载图像之前,我必须一一检查格式:

auto readImage = [](const QString & path)
{
    std::string formats[] = {
        "PNG",
        "JPG",
        "GIF",
        "JPEG",
    };

    for (auto && format : formats)
    {
        QImageReader img(path, format.c_str());
        if (img.canRead())
        {
            return QImage(path, format.c_str());
        }
    }
    return QImage(path);
};

QImage image = readImage(path);
if (image.isNull())
{
    //it does not enter here this time
}

是否有更好的方法来加载未知格式的图像?

使用load的{​​{1}}方法进行更新,仍然得到相同的结果:

QImage

1 个答案:

答案 0 :(得分:1)

我认为这是您所需要的(来自QImage documentation):

  

布尔QImage :: load(const QString&fileName,const char * format = nullptr)   从具有给定fileName的文件中加载图像。如果图像已成功加载,则返回true;否则,返回false。否则会使图像无效并返回false。   加载程序尝试使用指定的格式(例如PNG或JPG)读取图像。 如果未指定格式(默认),则会根据文件的后缀和标头自动检测格式。有关详细信息,请参见{QImageReader :: setAutoDetectImageFormat()} {QImageReader}。

如果没有,请尝试查看提到该选项的this answer jpeg插件丢失了吗?也许用* .png文件尝试完全相同的实验?