QT 三大绘图类:QPixmap/QImage/QPicture

QPixmapQImageQPicture 都是 QPaintDevice 的子类。

QPixmap

依赖硬件、加速显示、适合小图片

QPixmap 的设计本来就是用来加速显示,用 paint 绘图时用 QPixmap 会比其他类的效果好很多。一般小图片用 QPixmap

QPixmap也可以接受一个字符串作为一个文件的路径来显示这个文件,比如你想在程序之中打开 BMP、GIF、JPG、JPEG、PNG 等文件,就可以使用 QPixmap。使用QPainterdrawPixmap()函数可以把这个文件绘制到一个QLabelQPushButton或者其他的设备上面。QPixmap是针对屏幕进行特殊优化的,因此,它与实际的底层显示设备息息相关。注意,这里说的显示设备并不是硬件,而是操作系统提供的原生的绘图引擎。所以,在不同的操作系统平台下,QPixmap的显示可能会有所差别。QPixmap提供了静态的grabWidget()grabWindow()函数,用于将自身图像绘制到目标上。同时,在使用QPixmap时,你可以直接使用传值也不需要传指针,因为QPixmap提供了“隐式数据共享”,即传递QPixmap不必须使用指针。

更多参考:QPixmap

QBitmap

QBitmap继承自QPixmap,因此具有QPixmap的所有特性。QBitmap的色深始终为 1. 色深这个概念来自计算机图形学,是指用于表现颜色的二进制的位数。我们知道,计算机里面的数据都是使用二进制表示的。为了表示一种颜色,我们也会使用二进制。比如我们要表示8种颜色,需要用 3 个二进制位,这时我们就说色深是 3. 因此,所谓色深为 1,也就是使用 1 个二进制位表示颜色。1 个位只有两种状态:0 和 1,因此它所表示的颜色就有两种,黑和白。所以说,QBitmap实际上是只有黑白两色的图像数据。由于QBitmap色深小,因此只占用很少的存储空间,所以适合制作游标(QCursor)或者笔刷(QBrush)。

QImage

依赖软件,直接像素访问,适合大图片

既然依赖软件,那么就不需要用硬件 GUI 的线程了,可以开个软件的线程,可提高用户 UI 体验。

例子:

image = QtGui.QImage(3, 3, QtGui.QImage.Format_RGB32)

value = QtGui.qRgb(189, 149, 39)  # 0xffbd9527
image.setPixel(1, 1, value)

value = QtGui.qRgb(122, 163, 39)  # 0xff7aa327
image.setPixel(0, 1, value)
image.setPixel(1, 0, value)

value = QtGui.qRgb(237, 187, 51)  # 0xffedba31
image.setPixel(2, 1, value)

QImage 使用 Qt 自身的绘图引擎,可提供在不同平台上相同的图像呈现效果,并可通过 pixel()setPixpel() 等方法直接存取和修改指定的像素。

QPicture

QPicture是一个绘画设备类,它记录了并可以重演QPainter的命令。你可以使用QPainterbegin()方法,指定在QPicture上绘图,使用end()方法结束绘图,使用QPicturesave()方法將QPainter所使用过的绘图指令存至档案。要重播绘图指令的话,建立一个QPicture,使用load()方法载入绘图指令的档案,然后在指定的绘图裝置上绘制QPicture

记录绘制的图形:

picture = QPicture()
painter = QPainter()
painter.begin(picture)            # paint in picture
painter.drawEllipse(10,20, 80,70) # draw an ellipse
painter.end()                     # painting done
picture.save("drawing.pic")       # save picture

接着便可在您的绘图设备重画已经保存的图形:

picture = QPicture()
picture.load("drawing.pic")           # load picture
painter = QPainter()
painter.begin(myImage)                # paint in myImage
painter.drawPicture(0, 0, picture)    # draw the picture at (0,0)
painter.end()                         # painting done

更多参考:QPicture¶

注意

QPixmap跟硬件是相关的,如 X11, Mac 以及 Symbian 平台上,QPixmap是存储在服务器端,而QImage则是存储在客户端,在 Windows 平台上,QPixmapQImage都是存储在客户端,并不使用任何的GDI资源。

在 X11, Mac 以及 Symbian 平台上,因为 QImage 是存储在客户端,往QImage上绘图比较快,但显示它则比较慢。因为QPixmap是存储在服务器端,往QPixmap上绘图比较慢,但显示它则比较快。但在 Windows 平台上则是是一样的,因为它们都存储在客户端。

QImage是设计并优化来为 I/O操作的,可以直接访问和操作像素,而QPixmap是设计并优化来在屏幕上显示图片的。QBitmap仅是继承自QPixmap的一个方便使用的类,是为了确保图片的深度为1。QPicture是绘图设备,可以用来重现QPainter命令。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354