请问一下在 Pyqt5 中,有一个 160*120bit 为一帧的图像的流, 1 代表黑, 0 代表白。是应该处理再添加 bmp 头文件再显示到窗口中速度比较快还是绘点比较快呢?我想要有 50FPS 左右能实现吗。……

2017-11-05 16:29:37 +08:00
 tuduweb
2861 次点击
所在节点    Python
15 条回复
imn1
2017-11-05 16:57:41 +08:00
没看明白

一个像素就有 256*256*256 bits 了,你这个还不够一个像素呢
msg7086
2017-11-05 18:11:28 +08:00
@imn1 你这个像素是宇宙诞生之初的奇点吗?
shoujiaxin
2017-11-05 18:26:10 +08:00
用 Qt 做过类似的,我的图像是 80*60 的,显示的时候放大到 480*360,但是帧率低,30 左右,我是直接绘点,但是感觉现实图像的时候拖动窗口会有卡顿。如果不保存的话没必要处理成 bmp 吧,Qt 处理和显示图像效率好像不高
tuduweb
2017-11-05 19:59:59 +08:00
@imn1 就是一个 X 列 Y 行的矩阵,每一个元素为 1 或者 0,绘出来…
tuduweb
2017-11-05 20:01:08 +08:00
@shoujiaxin 那用其他的图形库怎么样呢……
takanasi
2017-11-05 20:07:18 +08:00
@imn1 三个 byte 吧
shoujiaxin
2017-11-05 21:04:06 +08:00
@tuduweb 其他库就没有研究过了,因为只是做个小工具,就怎么方便怎么来了
rainex
2017-11-05 21:05:04 +08:00
对 pyqt 不太了解,不过建议楼主做下测试,我是倾向于 bmp 可以更快的

首先,不需要非得是 bmp 文件,而是位图对象即可吧?先减少无畏的 io 时间

其次,ui 窗口上贴图乃至动画的方式,一般有高级的有底层的,底层的一般的内部实现都是直接调用 opengl 或 dx,让 gpu 直接处理,很快,而高级的一般是 cpu 再计算再处理,效率肯定要差不少,就好比 macos/ios 里 View 绘制用不用 CALayer。就贴图来讲,属于很远古的显卡就支持的功能,最早版本的 opengl 或 dx 就支持,pyqt 只要设计者合格,我相信会提供接近底层的贴图方法,那效率就应该远高于画像素,代码里自己折腾画图,跟 gpu 自己操作显存做与或运算来处理那效率差非常多的,当然,你的图并不大,或许目前主流电脑都可以满足你需求,我只是说我的经验和思路
imn1
2017-11-05 21:09:38 +08:00
@tuduweb @takanasi
好吧,我前面也写错了,一个像素 RGB 是 8*3 = 24 bits,写成 256 是脑子打结了
LZ 写成 160*120*2bit 黑白图,就容易明白了

@msg7086 #2
你把这么简单的东西,说的如此深奥,我不会答啊
tuduweb
2017-11-05 21:37:52 +08:00
@rainex 感谢…那我做下测试…
tuduweb
2017-11-05 21:39:10 +08:00
@imn1 学识少,不太会描述问题…确实写成 160*120*2bit 容易理解多了。受教了…
msg7086
2017-11-06 05:23:00 +08:00
@imn1 160x120x1bpp -> 160x120 bits

2bpp 就成灰度图了。
imn1
2017-11-06 09:32:11 +08:00
@msg7086
U R right
单色是一位,两位是四色 CGA 了
GeruzoniAnsasu
2017-11-06 10:15:03 +08:00
pyqt 不懂
但 qtc++里 QImage::Format_Mono 和 QImage::Format_MonoLSB 可定义以 bit 表示 pixel 的图像
应该可以直接将原始数据流转成 QImage 然后显示
参考文档 http://doc.qt.io/qt-5/qimage.html#Format-enum

另外 50fps 帧率很高了,可能会考虑上 opengl,在 qt 里用它自己封装的 opengl 类不复杂,但 pyqt 可能编译的时候没有带 opengl 模块,这个自己斟酌吧
tuduweb
2017-11-06 20:02:03 +08:00
@GeruzoniAnsasu 谢谢…我去看一下这个函数…
我昨晚想了想上位机刷新图像这么快看不出,应该 25fps 左右就差不多了。我再试试……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/403709

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX