Qt QImage 转 QPixmap 会导致UI颜色信息丢失

4
我正在尝试在我的主Qt UI中的QLabel上更新一个QPixmap。以下插槽被调用以使用“newImage”变量QImage(因为它来自不同的线程)来完成此操作。使用convertFromImage将QImage转换为someImage(我也尝试过::fromImage)。如果我只是将QImage“newImage”保存到文件中,我会得到一个绿色矩形和我之前用OpenCV绘制的红色文本,但是,如果我保存转换后的pixmap或显示转换后的pixmap,则会丢失图像中矩形和文本的颜色,但保留框架本身的颜色。我在下面发布了2张图片,以演示我传递给此插槽的QImage与在pixmap中显示在UI中的差异。我不知道如何使pixmap显示带有颜色的矩形和文本!我做错了什么?谢谢!
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;

}

2
m_NewPixMap = QPixmap::fromImage(newImage); 不起作用吗? - vahancho
不,它并没有。将其转换为像素图时,某种方式总是会在最终的像素图中遗漏绿色和红色。它总是黑色的... - PhilBot
从问题中,我理解矩形和文本是源图像的一部分?我无法提供解决方案,但我猜想问题可能与颜色的不同格式有关... ConvertToFormat 无法解决。也许尝试确保在源图像中,矩形和文本与图像的其余部分以相同的 RGB32 格式保存? - Thalia
@Thalia - 那个有效,谢谢!请将您的回复作为答案提供,我会给您奖励金。再次感谢。 - PhilBot
1个回答

3

通过题目,我理解到矩形和文本是原始图像的一部分?

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接