0

pyqt で tga を読み取る必要がありますが、これまでのところ、tga のピクセルあたりのバイト数が 3 または 4 ではなく 2 バイトである場合を除いて、これは正常に機能しているようです

具体的には、このセクション:

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] の値を入力して、正しい形式と色空間で値を取得するにはどうすればよいですか?

考え、アイデア、または助けてください!!!

4

2 に答える 2

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

私のために働きます。輝度とすべてを修正します。pixel[1] の値を 2 倍にしても、すべてのインスタンスで機能するかどうかはわかりませんが。

助けてくれてありがとう、イステプラ:)

于 2011-09-07T12:06:39.240 に答える
0

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

「ピクセルは BGR555 形式でリトルエンディアン順に格納されます。」

したがって、pixel[1] の「左端」の 5 ビットを青として取り、残りの 3 ビット + pixel[0] の「左端」の 2 ビットを緑、pixel[0] の次の 5 ビットを赤にする必要があります。

あなたの場合、コードは次のようになるはずです。

pixel = [(pixel[1]&0xF8)>>3, ((pixel[1]&0x7)<<2)|((pixel[0]&0xC0)>>6), (pixel[0]&0x3E)>>1)
color = qRgb(*pixel)
于 2011-09-06T13:30:51.950 に答える