Qt 将图像原始数据缓冲区设置为QMediaPlayer

Qt 将图像原始数据缓冲区设置为QMediaPlayer,qt,qt4,qt5,Qt,Qt4,Qt5,我想获取小部件应用程序的屏幕截图,然后使用setMedia()将其原始数据缓冲区设置为QMeidaPlayer。到目前为止,我所做的是接收图像,保存它,然后从中读取。但是,我想问您如何直接读取原始数据而不将其保存到media player中: QPixmap originalPixmap = QPixmap::grabWidget(this); QImage *image = new QImage(originalPixmap.toImage()); QByteArray ba; QBuf

我想获取小部件应用程序的屏幕截图,然后使用setMedia()将其原始数据缓冲区设置为QMeidaPlayer。到目前为止,我所做的是接收图像,保存它,然后从中读取。但是,我想问您如何直接读取原始数据而不将其保存到media player中:

QPixmap originalPixmap = QPixmap::grabWidget(this);

QImage *image = new QImage(originalPixmap.toImage());

QByteArray ba;

QBuffer buffer(&ba);

buffer.setBuffer(&ba);

buffer.open(QIODevice::WriteOnly);

image->save(&buffer); // writes image into ba in PNG format

image->save(image Path);

mediaPlayer.setMedia(QUrl::fromLocalFile(image path)); //I want this to read from raw data

mediaPlayer.play();
我希望这是CPU使用的最低限度。然而,保存和读取文件会消耗大量CPU,占47%

干杯

更新:我也用这个代码片段测试了这个程序。但它不会在视频小部件上绘制缓冲区内容


有没有办法解决这个问题,将图像原始数据输入到视频小部件?

这可能是一个解决方案,但同时他们不赞成QPixmap::grabWidget(),而赞成QWidget::grab()返回QPixmap。@pauljay基本目标是什么?我这样问是因为QMediaPlayer是用来读取视频或音频文件的,而不是图像,所以一个可能的解决方案是将.png转换为.mp4(或类似格式),这可能会很复杂。如果您在后台的目标是在QVideoWidget中显示QPixmap,那么还有其他目标alternatives@user2696674这样做有什么意义?您可以为ex将pixmap绘制到
QLabel
。这比将图片扔到视频小部件的成本要低。或者你想显示实时图像?我知道还有其他解决方案。我想知道是否有可能使用QBuffer和QMediaPlayer渲染图像,如果有,如何完成它,而不是使用标签或任何其他解决方法。只是因为我想知道。@PaulJay如我所说,解决方案是将QPixmap(或QImage)转换为.mp4或QtMultimedia后端支持的格式,这项工作可能会非常复杂。请使用
@username
QBuffer *buffer = new QBuffer(image_ba);
QMediaContent media;
mediaPlayer.setMedia(media, buffer);
mediaPlayer.play();