与 QImage 类相似, QPixmap 也可以直接载入和保存图片,但 QPixmap 对图像数据的操作却很不灵活。所以一般是在QImage 上完成图像的所有操作,最后利用 QPixmap 将图像显示在屏幕上。大多数 QPixmap 的方法与 QImage 一致(大家可以参考我的上一篇博文),有两个常用的函数是 QImage 没有的,需要我们特别注意:
convertFromImage:利用 QImage 的数据填充 QPixmap。
fromImage:静态函数,功能与 convertFromImage 相同。
利用 QLabel 显示 QImage 的一般方法为:
ui->label->setPixmap(QPixmap::fromImage(image));
QLabel缩放时维持图像宽高比例不变(可在 designer 中设置 alignment 属性为居中):
ui->label>setPixmap(QPixmap::fromImage(image).scaled(ui->label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
若要图像始终填充满QLabel,需要如下语句:
ui->label->setScaledContents(true);
利用 QLabel 显示 Mat 图像的一个方法为:
cv::Mat mat = cv::imread("c:/dev/test.jpg");
QImage image(mat.data,
mat.cols,
mat.rows,
mat.step,
QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(image.rgbSwapped()));