【问题标题】:QImage: auto detect format when loading imageQImage:加载图像时自动检测格式
【发布时间】:2018-07-11 13:44:11
【问题描述】:

我有一张带有.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
}

有没有更好的方法来加载未知格式的图片?

使用QImageload方法更新,还是一样的结果:

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

【问题讨论】:

标签: c++ qt qt5 qimage


【解决方案1】:

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

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

如果没有,请尝试查看提到该选项的 this answer 缺少 jpeg 插件?或许可以尝试使用 *.png 文件进行完全相同的实验?

【讨论】:

  • 应该是这个文档(doc.qt.io/qt-5/qimage.html#QImage-8),但它仍然返回无效的QImage。这就是为什么我必须手动指定图像格式
  • @PhạmAnhTuấn 文件扩展名是否与图像格式匹配?我的意思是,我在互联网上多次下载了带有 jpg 扩展名的图片,这些图片确实是 png。
  • 构造似乎与加载操作不同...您都尝试了吗?如果是这样,您能否将加载尝试添加到您的帖子中?谢谢!
猜你喜欢
  • 2010-09-16
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多