实战PyQt5: 122-使用QImage实现一个看图应用


实战PyQt5: 122-使用QImage实现一个看图应用文章插图
QImage简介QImage类提供了独立于硬件的图像表示形式 , 该图像表示形式可以直接访问像素数据 , 并且可以用作绘制设备 。 QImage是QPaintDevice子类 , 因此可以使用QPainter直接在图像上绘制 。 在QImage上使用QPainter时 , 可以在当前GUI线程以外的其他线程中执行绘制 。
QImage提供了多种方式来读取图像文件 , 在创建QImage对象时可以加载图像文件 , 也可以在创建对象之后 , 使用load()或者loadFrameData()函数来加载图像 。 加载图像时 , 文件名可以是磁盘上的实际文件 , 也可以是嵌入到应用程序的资源 。
QImage类支持包括单色 , 8位 , 32位和alpha混合图像 。 QImage提供了一组函数用于获取有关图像的各种信息和实现图像转换 。

  • 几何尺寸信息: 函数size(), width(), height(), dotsPerMeterX()和dotsPerMeterY()提供了图像的尺寸和纵横比信息 。 rect()函数返回图像的包围矩形 , vaild()函数用于判断一组坐标是否位于这个包围矩形内 。
  • 色彩信息: 使用pixel()函数可以获得指定像素的颜色 , 该颜色是一个独立于文件格式的QRgb值 。 对于单色或者8位图像 , colorCount()和colorTable() 函数提供了有关用于存储图数据的颜色分量的信息 。 hasAlphaChannel()返回函数是否有alpha通道的信息 。
  • 文本信息: text() 函数返回给定文本关键值的图像文本信息 。 函数textKeys()返回图像的文本关键值信息 。
  • 底层信息: depth()函数返回图像的位深度信息 。 图像支持的深度信息把包括1(单色) , 8、16、24和32位 。 bitPlaneCount()返回图像的位平面数 。
像素操作QImage的像素操作功能取决于图像格式而有所不同 , 原因是单色和8位图像的颜色是基于索引值 , 使用颜色查找表来获得 , 而32位图像则直接存储ARGB值 。
如果是32位图像 , 则可以使用setPixel()函数为给定的像素设置一个ARGB颜色值 。 例如:
image = QImage(3, 3, QImage.Format_RGB32) value = http://kandian.youth.cn/index/qRgb(180, 149, 39)# 0xffbd9527image.setPixel(1, 1, value) value = qRgb(122, 163, 39)# 0xff7aa327image.setPixel(0, 1, value)image.setPixel(1, 0, value) value = qRgb(237, 187, 51)# 0xffedba31image.setPixel(2, 1, value)用一个方格表示一个像素 , 上面代码生成的图像可以用下图来描述:
实战PyQt5: 122-使用QImage实现一个看图应用文章插图
图片来源:doc.qt.io
对于8位和单色图像 , 像素值为图像颜色表中的索引值 , 因此setPixel()函数只能用于将给定位置的像素颜色设置为图像颜色表中的预定义的颜色值 , 即是说 , 它只能改变像素的索引值 。 若需要更改颜色或者将颜色添加到图像的颜色表中 , 可以使用setColor()函数来完成 。 颜色表中的一项为一个ARGB颜色值 , 使用qRgb()和qRgba()函数可以为setColor()提供需要的QRgb值 。 例如:
image = QImage(3, 3, QImage.Format_Indexed8) value = http://kandian.youth.cn/index/qRgb(122, 163, 39)# 0xff7aa327image.setColor(0, value) value = qRgb(237, 187, 51)# 0xffedba31image.setColor(1, value) value = qRgb(180, 149, 39)# 0xffbd9527image.setColor(2, value) image.setPixel(0, 1, 0)image.setPixel(1, 0,0)image.setPixel(1,1,2)image.setPixel(2,1,1)用一个方格表示一个像素 , 上面代码生成的图像可以用下图来描述:
实战PyQt5: 122-使用QImage实现一个看图应用文章插图
图片来源:doc.qt.io
图像格式【实战PyQt5: 122-使用QImage实现一个看图应用】QImage中存储的每个像素都由整数表示 。 整数的大小取决于格式 。 QImage支持QImage.Format枚举描述的图像格式 。 Qt提供以下图像格式: