qt6里面没有Format_RGB24

There is no Format_RGB24 in qt6

在 QT5 中我们有 QVideoFrame::Format_RGB24 格式(我有没有 alpha 通道的 RGB 图像)。

在 QT6 (6.2.0) 中缺少此格式。

为什么删除了这种格式? 在 QT6 中转换 RGB -> RGBX (A) 的最佳方法是什么?

如果您使用的是 QImage(或者您可以将其转换为 QImage),那么您可以将格式转换为 QImage::Format_RGBX8888 然后复制位:

#include <QGuiApplication>
#include <QImage>
#include <QVideoFrame>
#include <QVideoFrameFormat>

int main(int argc, char *argv[])
{
    QGuiApplication a(argc, argv);
    QImage image(100, 100, QImage::Format_RGB888);
    image.fill(QColor(50, 100, 200));

    if(image.format() == QImage::Format_Invalid)
        return EXIT_FAILURE;
    QVideoFrameFormat video_frame_format(image.size(), QVideoFrameFormat::Format_RGBX8888);
    QImage rgbx = image.convertToFormat(QVideoFrameFormat::imageFormatFromPixelFormat(video_frame_format.pixelFormat()));
    QVideoFrame video_frame(video_frame_format);
    if(!video_frame.isValid() || !video_frame.map(QVideoFrame::WriteOnly)){
        qWarning() << "QVideoFrame is not valid or not writable";
        return EXIT_FAILURE;
    }
    int plane = 0;
    std::memcpy(video_frame.bits(plane), rgbx.bits(), video_frame.mappedBytes(plane));
    video_frame.unmap();

    qDebug() << video_frame << rgbx.format();

    return EXIT_SUCCESS;
}