Untitled
unknown
plain_text
a year ago
1.7 kB
6
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