我有一个脚本,可以显示服务器上找到的所有图像并定期检查。有时,它会下载一个尚未完全上传的图像,导致下半部分呈灰色的不完整JPEG。
我使用qbyteAray来存储接收到的数据,并通过以下方式在QPixmap中加载:
我使用qbyteAray来存储接收到的数据,并通过以下方式在QPixmap中加载:
QByteArray bytes = reply->readAll(); // bytes
qDebug() << "loading pixmap" ;
qDebug() << pixmap.loadFromData(bytes);
我希望能检测到加载失败并在500毫秒后重试,但我找不到验证像素图是否包含有效JPG数据的解决方案。 loadFromData
返回TRUE,但在该方法内部我收到一个警告,以下是应用程序输出的相关内容:
loading pixmap
Corrupt JPEG data: premature end of data segment
true
有没有办法检查/验证 pixmap 是否存在损坏的数据?
解决方案
如vsz所建议的,如果图像是自然图像而不是图形,则下行像素很少是无效JPG的确切灰度。因此,可以在方法中使用以下代码确定图像是否有效:
QImage img = pixmap.toImage();
if( img.pixel(img.width()-1,img.height()-1 ) == 4286611584 && img.pixel(img.width()/2,img.height()-1 ) == 4286611584 && img.pixel(0,img.height()-1 ) == 4286611584 ) return false; //invalid color : 4286611584 (default gray jpg)
else return true;
loadFromData
返回true),还是在说关于“损坏的JPEG数据”的警告是虚假的? - peppe