Преобразование Qt QImage в QPixmap теряет информацию о цвете для пользовательского интерфейса

Я пытаюсь обновить QPixmap на QLabel в моем основном пользовательском интерфейсе Qt. Для этого вызывается следующий слот с переменной QImage "newImage" (потому что она из другого потока). QImage преобразуется в someImage с помощью convertFromImage (я также пробовал ::fromImage). Если я просто сохраню QImage «newImage» в файл, я получу зеленый прямоугольник и красный текст, которые я рисую с помощью OpenCV ранее, однако, если я сохраню преобразованное растровое изображение ИЛИ покажу преобразованное растровое изображение, я потеряю цвет для прямоугольника и текста на изображении, но сохраните цвет для самой рамки. Я разместил 2 изображения ниже, чтобы продемонстрировать разницу между QImage, который я передаю в этот слот, и растровым изображением, которое отображается в пользовательском интерфейсе в растровом изображении. Я не знаю, как заставить растровое изображение отображать прямоугольник и текст с цветом! Что я делаю неправильно? Спасибо!

введите здесь описание изображениявведите здесь описание изображения

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;

}

person PhilBot    schedule 25.08.2014    source источник
comment
m_NewPixMap = QPixmap::fromImage(newImage); не работает?   -  person vahancho    schedule 25.08.2014
comment
Нет, преобразование в растровое изображение каким-то образом всегда оставляет зеленый и красный цвет в окончательном растровом изображении. Он всегда черный...   -  person PhilBot    schedule 25.08.2014
comment
Из вопроса я понимаю, что прямоугольники и текст являются частью исходного изображения? Я не могу предложить решение, но предполагаю, что проблема может быть связана с разными форматами цвета... которые ConvertToFormat не может решить. Возможно, попробуйте убедиться, что в исходном изображении прямоугольники и текст сохранены в том же формате RGB32, что и остальная часть изображения?   -  person Thalia    schedule 28.08.2014
comment
@ Талия - это сработало, спасибо! Пожалуйста, предоставьте свой ответ в качестве ответа, и я дам вам награду. Еще раз спасибо.   -  person PhilBot    schedule 29.08.2014


Ответы (1)


Из вопроса я понимаю, что прямоугольники и текст являются частью исходного изображения?

Я предполагаю, что проблема может быть связана с разными форматами цвета... которые ConvertToFormat не может решить.

Возможно, попробуйте убедиться, что в исходном изображении прямоугольники и текст сохранены в том же формате RGB32, что и остальная часть изображения?

person Thalia    schedule 29.08.2014