QImage image = QImage(this->player->videoSurface()->surfaceFormat().size(), QImage::Format_ARGB32); QPainter painter(&image); this->player->videoSurface()->surfaceFormat().videoFrameToPixmap(this->player->currentVideoFrame()).toImage().scaled(image.size()).swap(image);有些参数不存在
时间: 2023-06-25 14:06:23 浏览: 109
这段代码是想获取当前视频帧并将其转换为 QImage 对象,但是它存在一些错误。
首先,`videoSurface()` 函数返回的是 `QAbstractVideoSurface*` 类型的指针,因此需要判断指针是否有效。
其次,在 `QImage` 的构造函数中,需要传递一个有效的 `size` 参数,你可以通过调用 `this->player->videoSurface()->surfaceFormat().frameSize()` 来获取当前视频帧的大小。
最后,在调用 `videoFrameToPixmap` 函数时,需要传入一个 `QVideoFrame` 类型的参数,而不是 `this->player->currentVideoFrame()`。你可以尝试使用 `this->player->videoSurface()->currentFrame()` 来获取当前视频帧。
修改后的代码如下:
```c++
if (this->player->videoSurface()) {
QSize frameSize = this->player->videoSurface()->surfaceFormat().frameSize();
QImage image(frameSize, QImage::Format_ARGB32);
QPainter painter(&image);
QVideoFrame currentFrame = this->player->videoSurface()->currentFrame();
if (!currentFrame.isValid()) {
return; // 当前帧无效
}
QPixmap pixmap = this->player->videoSurface()->surfaceFormat().videoFrameToPixmap(currentFrame);
painter.drawPixmap(QRect(QPoint(0, 0), frameSize), pixmap);
painter.end();
}
```
希望能帮到你!
阅读全文