我有一个扩展名为.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
答案 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文件尝试完全相同的实验?