【发布时间】:2019-05-17 03:21:54
【问题描述】:
我正在尝试连续捕获图像,以便可以使用 UDP 发送它们。我这样做是为了实现一个实时视频流程序。
下面的代码连续捕获图像并将图像分配给 QGraphicsScene,以便我可以测试图像是否像视频一样播放。但是当我运行程序时,即使我删除了指针,我的计算机也会在几秒钟后冻结。我该如何解决这个问题?
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QThread>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
cam = new QCamera;
cam->setCaptureMode(QCamera::CaptureStillImage);
viewfinder = new QCameraViewfinder;
viewfinder->show();
QCameraImageCapture *cap = new QCameraImageCapture(cam);
cap->setCaptureDestination(QCameraImageCapture::CaptureToBuffer);
cam->setViewfinder(viewfinder);
QObject::connect(cap, &QCameraImageCapture::imageCaptured, [=] (int id, QImage img) {
while(true){
QByteArray *buf = new QByteArray;
QBuffer *buffer=new QBuffer(buf);
buffer->open(QIODevice::WriteOnly);
img.save(buffer, "BMP");
QPixmap *pixmap = new QPixmap();
pixmap->loadFromData(buffer->buffer());
scene->addPixmap(*pixmap);
delete buf;
delete buffer;
delete pixmap;
QThread::sleep(0.0416);
cap->capture();
}
});
QObject::connect(cap, &QCameraImageCapture::readyForCaptureChanged, [=] (bool state) {
if(state == true) {
cam->searchAndLock();
cap->capture();
cam->unlock();
}
});
cam->start();
}
MainWindow::~MainWindow()
{
delete ui;
}
【问题讨论】:
-
请告诉我你为什么不赞成我的问题。我是这个网站的新手,但在您的帮助下,我可以相应地编辑我的问题。
-
不要担心投反对票,担心你的问题,如果你认为你的问题是最好的,你可以把它留在那里,如果你认为它可能更好,那就继续努力吧。 SO中的投票是并且应该是匿名的,所以不要要求解释,这被认为是噪音。
-
我建议您阅读How to Ask 并改进您的问题,目前它是XY problem,因为您的目标是将图像写入缓冲区并通过套接字发送但是您要求一个可能的解决方案:但是当我运行程序时,我的计算机会在几秒钟后冻结,即使我删除了指针,您不确定它是否是正确的。
标签: c++ qt qt5 qpixmap qcamera