我工作的一个视觉应用,我需要有一个"实时取景"从相机显示使用的QPixmap对象在屏幕上.我们将以30帧/秒的速度连续更新屏幕.
我的问题是,这个应用程序必须运行在一些3-5岁的计算机上,按照今天的标准,这些计算机速度很慢.所以我想做的是能够直接写入QPixmap内部的显示字节数组.通过程序代码会后,正在创建的改变在新的QPixmap的点阵图结果内容几乎选项.这是我试图驾驶的开销.
另外,我想阻止所有新的/删除发生只是为了控制内存碎片.
有什么建议?
and*_*ref 14
首先,关于Qt中"图片"类的最重要信息:
QImage专为I/O和直接像素访问和操作而设计和优化,而QPixmap则专为在屏幕上显示图像而设计和优化.
这意味着QPixmap是平台本机图像格式的通用表示:Pixmap在Unix上,HBITMAP在Windows上,CGImageRef在Mac上.QImage是"具有操作的像素阵列"类的类.
我假设以下内容:
我的建议是使用QImage而不是QPixmap.具体来说,有一个构造函数接受原始字节数组并直接将其用作像素缓冲区:
QImage::QImage(uchar *data, int width, int height, int bytesPerLine, Format format)
构建了QImage后,使用QPainter以所需频率将其绘制到窗口小部件.但请注意:
我们的团队设法在仅使用Qt(尽管帧速率较低)的Atom驱动的计算机上平滑地显示全屏压缩视频.但是,如果这不能解决您的问题,我将绕过Qt并使用本机绘图API.如果您绝对需要平台独立性,那么OpenGL或SDL可能是很好的解决方案.