2 бит на пиксель цвет тга в qRgb - PullRequest
0 голосов
/ 06 сентября 2011

Мне нужно прочитать tga с помощью pyqt, и пока, похоже, это работает нормально, за исключением случаев, когда 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()

как мне ввести значения pixel [0] и pixel [1], чтобы получить значения в правильном формате и цветовом пространстве?

Любые мысли, идеи или помощь, пожалуйста!

Ответы [ 2 ]

1 голос
/ 07 сентября 2011
pixel = [ pixel[1]*2 , pixel[1]*2 , pixel[1]*2 ]
color = qRgb(*pixel)

у меня работает.Правильная яркость и все.Хотя я не уверен, что удвоение значения pixel [1] подойдет для всех случаев.

Спасибо за помощь istepura:)

0 голосов
/ 06 сентября 2011

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)
...