V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tuduweb
V2EX  ›  Python

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

  •  
  •   tuduweb · 2017-11-05 16:29:37 +08:00 · 2847 次点击
    这是一个创建于 2579 天前的主题,其中的信息可能已经有所发展或是发生改变。
    15 条回复    2017-11-06 20:02:03 +08:00
    imn1
        1
    imn1  
       2017-11-05 16:57:41 +08:00
    没看明白

    一个像素就有 256*256*256 bits 了,你这个还不够一个像素呢
    msg7086
        2
    msg7086  
       2017-11-05 18:11:28 +08:00 via Android
    @imn1 你这个像素是宇宙诞生之初的奇点吗?
    shoujiaxin
        3
    shoujiaxin  
       2017-11-05 18:26:10 +08:00 via iPad
    用 Qt 做过类似的,我的图像是 80*60 的,显示的时候放大到 480*360,但是帧率低,30 左右,我是直接绘点,但是感觉现实图像的时候拖动窗口会有卡顿。如果不保存的话没必要处理成 bmp 吧,Qt 处理和显示图像效率好像不高
    tuduweb
        4
    tuduweb  
    OP
       2017-11-05 19:59:59 +08:00
    @imn1 就是一个 X 列 Y 行的矩阵,每一个元素为 1 或者 0,绘出来…
    tuduweb
        5
    tuduweb  
    OP
       2017-11-05 20:01:08 +08:00
    @shoujiaxin 那用其他的图形库怎么样呢……
    takanasi
        6
    takanasi  
       2017-11-05 20:07:18 +08:00
    @imn1 三个 byte 吧
    shoujiaxin
        7
    shoujiaxin  
       2017-11-05 21:04:06 +08:00 via iPad
    @tuduweb 其他库就没有研究过了,因为只是做个小工具,就怎么方便怎么来了
    rainex
        8
    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
        9
    imn1  
       2017-11-05 21:09:38 +08:00
    @tuduweb @takanasi
    好吧,我前面也写错了,一个像素 RGB 是 8*3 = 24 bits,写成 256 是脑子打结了
    LZ 写成 160*120*2bit 黑白图,就容易明白了

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

    2bpp 就成灰度图了。
    imn1
        13
    imn1  
       2017-11-06 09:32:11 +08:00
    @msg7086
    U R right
    单色是一位,两位是四色 CGA 了
    GeruzoniAnsasu
        14
    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
        15
    tuduweb  
    OP
       2017-11-06 20:02:03 +08:00
    @GeruzoniAnsasu 谢谢…我去看一下这个函数…
    我昨晚想了想上位机刷新图像这么快看不出,应该 25fps 左右就差不多了。我再试试……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5572 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:51 · PVG 14:51 · LAX 22:51 · JFK 01:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.