每像素2位tga的颜色为qRgb

时间:2011-09-06 13:04:10

标签: colors pyqt rgb pixel tga

我需要用pyqt读取tga,到目前为止,这似乎工作得很好,除非tga每像素有2个字节而不是3或4.我的代码来自这里http://pastebin.com/b5Vz61dZ

特别是本节:

def getPixel( file, bytesPerPixel):
    'Given the file object f, and number of bytes per pixel, read in the next pixel and return a     qRgba uint'
    pixel = []
    for i in range(bytesPerPixel):
        pixel.append(ord(file.read(1)))

    if bytesPerPixel==4:
        pixel = [pixel[2], pixel[1], pixel[0], pixel[3]]
        color = qRgba(*pixel)
    elif bytesPerPixel == 3:
        pixel = [pixel[2], pixel[1], pixel[0]]
        color = qRgb(*pixel)
    elif bytesPerPixel == 2:
        # if greyscale
        color = QColor.fromHsv( 0, pixel[0] , pixel[1])
        color = color.value()

    return color

和这部分:

elif bytesPerPixel == 2:
    # if greyscale
    color = QColor.fromHsv( 0, pixel[0] , pixel[1])
    color = color.value()

我如何输入像素[0]和像素[1]值来创建以正确的格式和颜色空间获取值?

任何想法,想法或帮助请!!!

2 个答案:

答案 0 :(得分:1)

pixel = [ pixel[1]*2 , pixel[1]*2 , pixel[1]*2 ]
color = qRgb(*pixel)

适合我。正确的亮度和所有。虽然我不确定像素[1]值加倍是否适用于所有实例。

感谢所有帮助istepura:)

答案 1 :(得分:0)

http://lists.xcf.berkeley.edu/lists/gimp-developer/2000-August/013021.html

“像素以小端顺序存储,采用BGR555格式。”

所以,你必须将“最左边”5位像素[1]视为蓝色,其余3位+ 2“最左边”位像素[0]为绿色,接下来5位像素[0]将是红色的。

在您的情况下,我想,代码应该是这样的:

pixel = [(pixel[1]&0xF8)>>3, ((pixel[1]&0x7)<<2)|((pixel[0]&0xC0)>>6), (pixel[0]&0x3E)>>1)
color = qRgb(*pixel)