2011-09-06 10 views
0

これは、tgaのpyqtを読む必要があります。これまでのところ、tgaのピクセル数が3または4ではなく2バイトである場合を除き、これはうまくいきます。http://pastebin.com/b5Vz61dZ2ビット/ピクセルqRgb

特にこのセクション:

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

方法希望I入力画素[0]と画素[1]に正しい形式で値を取得作成する値をとcolorspace?

どのような考え、アイデアや助けてください!

答えて

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

作品。輝度とすべての補正。ピクセル[1]の値を倍にしてもすべてのインスタンスで正しく機能するかどうかはわかりませんが。

は、すべてのヘルプistepura :)

0

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

"ピクセルはBGR555形式で、リトルエンディアンのどちらの順序で格納されています。"

したがって、ピクセル[0]の残りの3ビット+ 2 "左端"ビットは緑色になり、ピクセル[0]の次の5ビットは青色になります。赤でしょう。あなたのケースでは

、私は、コードのようなものであるべきと仮定します。私のために

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

感謝のためではなく、[0] = 148と、画素[1] = 82 赤、graan青のチャンネルが異なるだろうことを意味1点画素で、このコードでいただき、ありがとうございます画像がグレースケールであっても、 また、このような悩みはありますが、あなたの構文はうまくいかないようです。私はPython 2.6を使用しています、あなたはそれ以降のバージョンを使用していますか、それはちょうど注釈ですか? – Jared

+0

@mushu。ああそれがグレースケールの画像であることに気付かなかった。グレーレベルの8ビット+アルファの8ビットですか?もしそうなら、http://stackoverflow.com/q/835753/851055 – istepura

+0

に記載されているように、灰色のピクセル[1]をrgbに変換することができます。最初の投稿には 'pixel = [pixel [1]、pixel [1]、pixel [1]]' 'color = qRgb(* pixel)' と書いてみましたが、輝度は正しくありません。うまくいった。ルミナンスを補正する方法はありますか? – Jared

関連する問題