Qt QImage 到 QPixmap 的转换丢失了 UI 的颜色信息

标签 qt qimage qpixmap qlabel

我正在尝试在我的主要 Qt UI 中更新 QLabel 上的 QPixmap。调用以下槽以使用“newImage”变量 QImage 执行此操作(因为它来自不同的线程)。 QImage 使用 convertFromImage 转换为 someImage (我也尝试过::fromImage )。如果我只是将 QImage“newImage”保存到文件中,我会得到一个绿色矩形和我之前用 OpenCV 绘制的红色文本,但是,如果我保存转换后的像素图或显示转换后的像素图,我会丢失矩形和文本的颜色在图像中,但保留框架本身的颜色。我在下面发布了 2 张图片,以演示我通过此插槽的 QImage 与像素图中显示在 UI 上的像素图之间的区别。我不知道如何让像素图显示带颜色的矩形和文本!我究竟做错了什么?谢谢!

enter image description here enter image description here

void MainWindow::updateImage(QImage newImage, double timeElapsed) {

    QImage someImage = newImage.convertToFormat(QImage::Format_RGB888);

    // Get pixmap from data
    m_NewPixMap.convertFromImage(someImage,Qt::ColorOnly); // Tried various ones of these

    // Debug status
//    qDebug() << "Pixmap received by MainWindow and elapsed time is: " << timeElapsed << " ( Image size is: " << newImage.byteCount() << " )";
//    qDebug() << "Pixmap is null? " << m_NewPixMap.isNull();

    // Update the label
    float hz = 1000.0f / timeElapsed;
    QString status;
    status.sprintf("FrameRate (Hz) = %.02f (%.0f ms)", hz, timeElapsed);

    // Update status label
    m_StatusLabel->setText(status);

    // Update the main view
    m_Label->setPixmap(m_NewPixMap);
    repaint();

    //qDebug() << "Saving QImage now...";
    QFile file(QString("output_detected_images/detected_image_%1.png").arg(m_Counter));
    file.open(QIODevice::WriteOnly);
    bool savedSuccessfully = newImage.save(&file,"PNG"); // This gives proper color in image
    //bool savedSuccessfully =  m_NewPixMap.save(&file, "PNG"); // THIS GIVES A BLACK IMAGE
    qDebug() << "Done saving QPixmap... " << savedSuccessfully;

}

最佳答案

从问题中,我了解到矩形和文本是源图像的一部分?

我猜这个问题可能与颜色的不同格式有关... ConvertToFormat 无法解决。

也许尝试确保源图像中的矩形和文本以与图像其余部分相同的 RGB32 格式保存?

关于Qt QImage 到 QPixmap 的转换丢失了 UI 的颜色信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25478186/

相关文章:

c++ - cv::Mat到QImage然后返回

qt - 如何将 QImage 裁剪到其不透明区域?

html - 绘制具有透明背景的html

c++ - QPixmap 不适用于存储在变量中的图像路径

c++ - ObjectList/Repeater 的 QML DefaultProperty

c++ - 如何使用 Qt 从缓冲区加载图像?

c++ - QSettings 可以被多线程安全访问吗?

qt - 如何显示 QGraphicsPixmapItem 中的像素位置和颜色

qt - 当我展开主窗口时,为什么我的中央 QGLWidget 不会增长?

c++ - 如何用 QStringList 填充 ListView ?