解决Qt警告“linpng sRGB 不正确”的问题
Resolve the issue of Qt warning ‘incorrect linpng sRGB’
————————————————————
问题概述
在我们的新版嵌入式实验平台里,使用新版5.11以上的Qt在读取某些PNG格式的图片会出现关于“libpng”库读取“sRGB”不正确的问题。它的问题报错大概如下所示:
libpng warning: iCCP: known incorrect sRGB profile ...
这个错误警告的问题并不影响我们的编译和使用,但如果我们是从命令窗口中运行的Qt设计程序,在我们的命令窗口中这个错误就会随着我们的每个需要调用到png图片的执行动作的增加而增加,给我们在调试和观察应用输出时造成极大的不便。因此,HoYoLab 的小伙伴整理了这个问题的解决思路。
问题的原因
我们查询了Qt官方的说法,只是因为 libpng
比较严格而已。
解决方案
1. 使用jpeg格式的图片
这个问题其实治标不治本,我们在每次使用的时候还需要对图片增加一次转换的步骤,这会降低我们的工作效率。
此外,jpeg拥有极好的压缩效率,但对于图片而言,它的清晰度会极大降低,并不适合我们开发集成的内置图标,也不符合实际的大多数场景的应用。
所以,我们并不建议使用这个方法。
2. 将PNG成为PNG
这句话没有歧义!我们的意思是,将你所使用的PNG图片转变为真正标准的PNG格式图片。我们在参考和查询网络上的方案时,发现我们只需要使用 QImage
读取再保存即可。
为此,我们封装了一个简单的功能函数为你解决这个问题:
int png_to_png(const QString file)
{
QImage image(file);
if(image.isNull()){
qDebug() << "Image error";
return -1;
}else{
image.save(file, "PNG");
}
return 0;
}
结束。