Untitled

 avatar
unknown
plain_text
5 months ago
1.7 kB
3
Indexable
#include <QVideoFrame>
#include <QImage>
#include <QtMultimedia>

QImage convertToRGB(const QVideoFrame &frame) {
    // Säkerställ att ramen är valid
    if (!frame.isValid()) {
        return QImage();  // Returnera en tom bild om ramen inte är giltig
    }

    // Lås ramen för att få åtkomst till dess data
    QVideoFrame cloneFrame(frame);
    cloneFrame.map(QVideoFrame::ReadOnly);  // Mappa ramen för läsning

    // Konvertera QVideoFrame till QImage
    QImage::Format imageFormat = QVideoFrame::imageFormatFromPixelFormat(cloneFrame.pixelFormat());
    QImage videoFrameImage(cloneFrame.bits(),
                           cloneFrame.width(),
                           cloneFrame.height(),
                           cloneFrame.bytesPerLine(),
                           imageFormat);

    // Skapa en output-bild i RGB888-format
    QImage out(videoFrameImage.size(), QImage::Format_RGB888);

    // Pekare till ingångs- och utgångspixlar
    const quint32 *inp = reinterpret_cast<const quint32 *>(videoFrameImage.bits());
    quint32 *outp = reinterpret_cast<quint32 *>(out.bits());

    // Beräkna antal pixlar
    int max = videoFrameImage.width() * videoFrameImage.height();

    // Loop genom alla pixlar
    for (int i = 0; i < max; i++) {
        int r = (inp[i] >> 16) & 0xff;  // Extrahera rött
        int g = (inp[i] >> 8) & 0xff;   // Extrahera grönt
        int b = inp[i] & 0xff;          // Extrahera blått

        // Sätt RGB-värden till output
        outp[i] = qRgb(r, g, b);
    }

    // Avmappa ramen och returnera den konverterade bilden
    cloneFrame.unmap();
    return out;
}
Editor is loading...
Leave a Comment