灰度图像的颜色表

时间:2016-08-05 22:31:02

标签: colors pyqt pyqt4 qimage

我在PyQt中有一个灰度图像,想要获得特定像素的颜色。灰度图像使用最多256个条目的颜色表。

from PyQt4 import QtGui

def test():
    image = QtGui.QImage(100, 100, QtGui.QImage.Format_Indexed8)
    image.load("d:/1.bmp")
    print image.pixel(1, 1)
    print image.pixelIndex(1, 1)

    image.setColorTable(list([i] for i in range(256)))
    print image.colorTable()

import sys
app = QtGui.QApplication(sys.argv)
window = test()
sys.exit(app.exec_())

这是d:/1.bmp: This is d:/1.bmp.

我有以下问题:

  • image.colorTable()返回一个256次的数字列表4294967295L(即2 ^ 32-1),尽管我刚刚将颜色表设置为0到255.

  • image.pixelIndex(1, 1)给出消息" QImage :: pixelIndex:不适用于32-bpp图像(无调色板)"虽然格式设置为Indexed8(并且isGrayscale()返回true)。

  • image.pixel(1, 1)返回4278190080(当我将格式设置为Format_RGB32时)。这颜色是什么? (它应该是黑色的。)

根据ekhumoro的回答新代码:

from PyQt4 import QtGui

def test():
    image = QtGui.QImage(100, 100, QtGui.QImage.Format_Indexed8)
    image.load("d:/1.bmp")
    image2 = image.convertToFormat(QtGui.QImage.Format_Indexed8)
    print "format:", image2.format()
    print "pixel color:", QtGui.qGray(image2.pixel(1, 1))

    image2.setColorTable(list([QtGui.qRgb(i, i, i)] for i in range(256)))
    print "color table:", image2.colorTable()

import sys
app = QtGui.QApplication(sys.argv)
window = test()
sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:2)

docs for QImage包含您问题的所有答案:

  • 来自setColorTable()的条目:

      

    将用于将颜色索引转换为 QRgb 值的颜色表设置为指定的颜色。使用图像时,颜色表必须足够大,以包含图像中存在的所有像素/索引值的条目,否则结果未定义

  • 来自load()的条目:

      

    加载程序尝试使用指定的格式(例如PNG或JPG)读取图像。 如果未指定format(默认值),则加载程序会探测文件以获取标题以猜测文件格式

    因此,传递给QImage构造函数的格式无关紧要,我预测print image.format()将输出值> 3.另外,查看pixelIndex()的条目我看到了:

      

    如果位置无效,或如果图像不是调色板图像(depth()> 8),则结果未定义

  • 来自pixel()的条目:

      

    QRgb QImage :: pixel(int x,int y)const。

    因此,此函数返回类型QRgb的值,由文档描述:

      

    格式为#AARRGGBB的ARGB四元组,相当于unsigned int。

    很方便,Qt提供了一些用于提取QRgb值的各种组件的函数。其中之一是qGray,其描述如下:

      

    从给定的ARGB四元组rgb返回灰色值(0到255)。

    (注意:这些函数在全局命名空间中,因此在PyQt中,您可以在QtGui模块中找到它们。