gpt4 book ai didi

qt - 显示连续 QImages 流的有效方式

转载 作者:行者123 更新时间:2023-12-04 18:34:19 46 4
gpt4 key购买 nike

我目前正在使用 QLabel 来执行此操作,但这似乎很慢:

void Widget::sl_updateLiveStreamLabel(spImageHolder_t _imageHolderShPtr) //slot
{
QImage * imgPtr = _imageHolderShPtr->getImagePtr();
m_liveStreamLabel.setPixmap( QPixmap::fromImage(*imgPtr).scaled(this->size(), Qt::KeepAspectRatio, Qt::FastTransformation) );
m_liveStreamLabel.adjustSize();
}

在这里,我为每个到达的新图像生成一个新的 QPixmap 对象。由于 QPixmap 操作仅限于 GUI 线程,这也让 GUI 感觉响应很差。
我已经看到已经有一些关于此的讨论,其中大多数建议使用 QGraphicsView 或 QGLWidget,但我无法找到如何正确使用它们的快速示例,这正是我正在寻找的。
我很感激任何帮助。

最佳答案

QPixmap::fromImage不是唯一的问题。使用 QPixmap::scaledQImage::scaled也应该避免。但是你不能显示 QImage直接在 QLabelQGraphicsView .这是我的类(class)显示 QImage直接将其缩放到小部件的大小:

标题:

class ImageDisplay : public QWidget {
Q_OBJECT
public:
ImageDisplay(QWidget* parent = 0);
void setImage(QImage* image);

private:
QImage* m_image;

protected:
void paintEvent(QPaintEvent* event);

};

来源:
ImageDisplay::ImageDisplay(QWidget *parent) : QWidget(parent) {
m_image = 0;
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
}

void ImageDisplay::setImage(QImage *image) {
m_image = image;
repaint();
}

void ImageDisplay::paintEvent(QPaintEvent*) {
if (!m_image) { return; }
QPainter painter(this);
painter.drawImage(rect(), *m_image, m_image->rect());
}

我在缩小到 600x600 大小的 3000x3000 图像上对其进行了测试。它提供 40 FPS,而 QLabelQGraphicsView (即使启用了快速图像转换)也能提供 15 FPS。

关于qt - 显示连续 QImages 流的有效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22353080/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com