c++ - 使用 QGraphicsView 进行图像流式传输
问题描述
我正在尝试将 CameraLink 相机中的图像显示到 QGraphicsView 中。我正在使用一个具有 get() 和 set() 函数的环形缓冲区以及两个线程,它们消耗或生成此环形缓冲区中的图像。这部分有效,因为我已经使用 QWidget 成功进行了流式传输。我想使用 QGraphicsView 因为我想绘制那些传入的图像
我有一个提升为 QGraphicsView 的显示类,每次生成图像时,都会从消费者线程向以下函数发出信号:
void display::drawImage(ImageBW* image)
{
firstImage = image;
QRect rect;
rect.setHeight(1000);
rect.setWidth(2000);
QApplication::postEvent(this->viewport(),new QPaintEvent(rect));
}
我重新实现了 QGraphicsview 类的 painEvent:
void display::paintEvent(QPaintEvent *event)
{
if(firstImage)
_drawImage();
event->setAccepted(true);
}
绘图功能是:
void display::_drawImage()
{
int w, h;
if(img)
{
delete img;
img = NULL;
}
w = firstImage->getSizeX();
h = firstImage->getSizeY();
unsigned char * udata = (unsigned char *)firstImage ->getData();
img = new QImage(udata,w, h,QImage::Format_Grayscale8);
pix_img = QPixmap::fromImage(*img);
scene->clear();
scene->addPixmap(pix_img);
scene->setSceneRect(pix_img.rect());
scene->update();
update(); // I have tried here also setScene(scene)
}
在上面的代码中,firstImage 是一个 ImageBW* 变量。ImageBW 是存储来自相机的图像数据的位置。
我也尝试过使用 QGraphicsItem 和 addItem() 函数,但我没有得到图像。'scene' 在这个类的生产者和 'setScene(scene);' 上初始化 命令在那里。程序在一段时间后卡住了,这可能意味着这段代码产生了stackoverflow。请我已经尝试了我能想到的一切,任何帮助将不胜感激。
提前致谢
解决方案
推荐阅读
- javascript - 每行的 ag 网格编辑颜色取决于其键
- python - 在 Python 头部姿态估计 MTCNN 中计算 Yaw 和 Roll
- php - 使用 PHP8 设置 Sylius:如何使用最新的 Sylius Core 使用 sylius 标准版设置新项目?
- angular - *ngIf 异步管道问题
- python-3.x - 在 django 中,我创建了一个登录和注册页面,我在其中输入了一些数据并提交,但它显示页面未找到错误代码如下
- elasticsearch - 用于 es 7.9.1 的 seunjeon elasticsearch 插件
- html - html 超链接 - 添加自动中断
- magento2 - Magento 2关键CSS文件位置
- java - Java 2D - JLabel 仅在 JList 内部分绘制
- powershell - Powershell Select-Object:在计算属性中执行本机命令