欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

qt中,图片自适应QLabel显示

程序员文章站 2024-01-19 12:37:10
...

无自适应,直接显示

 //将图片格式转换成QImage格式,否则不能再lable上显示
    // QImage    imag; //声明QImage对象
    imag = QImage((const unsigned char *)(matData.data),
  // a 这表示直接将图片裁剪成label大小,无法实现图片自适应显示
                  ui->picture->width(),
                  ui->picture->height(),   
                   static_cast<int>(matData.step),
//图像格式:QImage::Format_RGB32 ,QImage::Format_RGB888,QImage::Format_Indexed8
                   QImage::Format_RGB888);

    //b  对应a,要用这种方式来显示   QImage-->QPixmap
    ui->picture->setPixmap(QPixmap::fromImage(imag));

自适应显示

 //将图片格式转换成QImage格式,否则不能再lable上显示
    // QImage    imag; //声明QImage对象
    imag = QImage((const unsigned char *)(matData.data),
 /*a/ 这表示直接将图片裁剪成label大小,无法实现图片自适应显示
                  ui->picture->width(),
                  ui->picture->height(),   */
   /* 为实现图片可以自适应显示在label上:
    * 1/将mat格式的图片转换成Qimage格式,图片大小就是原图的大小(mat的大小)  */            
                   matData.cols,
                   matData.rows,
                   static_cast<int>(matData.step),
//图像格式:QImage::Format_RGB32 ,QImage::Format_RGB888,QImage::Format_Indexed8
                   QImage::Format_RGB888);
    //2 将Qimage格式的图片转成Qpixmap格式
    QPixmap pix = QPixmap::fromImage(imag);
    //3 设置pixmap缩放的尺寸
    pix.scaled(ui->picture->size(), Qt::KeepAspectRatio);
    /*4  它的作用是设置label的属性scaledContents,
    这个属性的作用是允许(禁止)label缩放它的内容充满整个可用的空间。
    特别说明的一点是当使能该属性并且label显示pixmap时,它能够缩放pixmap充满整个可用的空间。*/
    ui->picture->setScaledContents(true);
    //5 用label显示一张图片
    ui->picture->setPixmap(pix);

扩展:QT图片格式转换(QImage和QPixmap、QImage和Mat互转)

1 QPixmap-->QImage:
QPixmap pix(path);
QImage img = pix.toImage();

2 QImage-->QPixmap:
QImage img(path);
QPixmap pix = QPixmap::fromImage(img);

3 QImage-->Mat:
cv::Mat mat;
mat = cv::Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(), image.bytesPerLine())

4 Mat-->QImage:
QImage image(mat.cols, mat.rows, QImage::Format_Indexed8);
相关标签: qt笔记