Qt视觉软件开发过程中,问题记录与思考 QPixmap::fromImage(img)访问冲突

1、函数的输出型参数用&修饰。

经典案例 swap(a,b),如果把b当做输出型参数,这个函数不会改变b。因为值传递深拷贝。参考我博客c++笔记2(参考learncpp.com) - 夕西行 - 博客园 (cnblogs.com)的1部分标签内容。

我在相机帧转为QImage格式时犯了这个错误。

在其他地方调用

这个img是空的,因为对象img本身不会被改变。

2、图像格式转换为QImage后,emit这个QImage可能出现的问题

情况一:转换后直接emit

 情况二:先调用封装的转换函数,再emit

 这种情况可能出现 QPixmap::fromImage(img)访问冲突,在转换函数内用深拷贝解决。

OutImage = QImage(buffer, width, height, QImage::Format_RGB888).copy();

 3、成功采集的帧指针建议深拷贝后使用。

帧指针指向的空间持续被相机清空、赋值。当采集成功时,如果让自定义的指针 m_ptr_success 指向这个成功采集的帧指针。那么在使用 m_ptr_success 的过程中可能造成内存读写冲突。

当然,也可以通过加锁方式解决。

 4、推荐使用官方相机SDK中的回调函数

当然也可以自己创建线程,将拉流死循环放在线程中执行。

5、connect不应该放在频繁触发函数中

如,按钮继续、暂停来回频繁按下。

可以打开相机时connect,关闭相机时disconnect。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章