2016-04-27 3 views
0

こんにちは私は私のプログラムに問題がありますが、何が間違っているのか分かりません。画像を開こうとするとバグが表示され、画像はボックスの下に表示されますが、色は間違っています。赤色/黄色/オレンジ色が青色に変わります。私の英語で申し訳ありません、画面の下を見てください。PythonライブラリPIL、ロードされたイメージが青色です

私のメインのコード:

http://pastebin.com/9Wq9sUDb

画像プログラムからのロード後: http://i.stack.imgur.com/O7q26.png

Orginal: http://i.stack.imgur.com/Ztm80.jpg

何が間違っている誰もが知っていますか?

+0

どこか反転取得さ


*。コードを見ると、私はどこに言えないのですか。 –

+2

これをより簡潔な質問にすることはできますか?エラーのあるコードは長すぎて間違いを検索できません。問題を1つの方法に分離してください。 – physicalattraction

答えて

1

確かに私は(私もそれをインストールしていないので、私はテストすることはできません)QTを使用していないが、あなたの問題がどこにあるか、これがあると私には思える:

my_image.data = data = img.convert('RGBA').tobytes('raw', 'RGBA') 
my_image.qt = img_qt = QImage(data, img.size[0], img.size[1], QImage.Format_ARGB32) 

あなたは画像をRGBA形式で保存し、ARGB形式で読み込みます。当然のことながら、色は入れ替えられるでしょう。

しかし、青と赤だけがスワップされているように見えるので、私はそこにもいくつかのエンディアンの不一致があると推測しているので、BGRA形式で効果的にロードします。 PILはR、G、B、Aの順番でバイトを与えます。そのため、QTはおそらく各ピクセルをリトルエンディアン語として読み込みます。代わりに.tobytes('raw', 'BGRA')を試してください。

+0

オクラホマ、それは仕事:)非常に感謝、私はその小さな詳細を逃した。 –

1

PILのRGBAとQtのFormat_ARGB32のバイナリ表現が異なります。

PILはピクセル(r, g, b, a)b'rrggbbaa' *(したがってRGBA)の形式でバイトとして格納します。これは、32ビットの整数0xaabbggrr *に対応します。

Qtは32ビットを使用してバイトに変換する整数0xaarrggbb(従ってARGB)は、だから、バイナリ表現に赤と青のバイトが交換されていることを確認することができb'bbggrraa'

あろう。 PILイメージをQImageに正しく変換するには、PIL.ImageQtモジュールのtoqimage()関数を使用する必要があります。 RRは、GG、R、G、Bの値のヘキサ表現のためのBB及びAAスタンド、それは赤と青の画素のように見える

関連する問題