Untitled
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