ビットの深さに応じて処理を振り分けたい
PILとnumpyを使用してイメージの配列を取得しています。
その情報を、QImageのコンストラクタに渡して、Imageオブジェクトをこさえています。
その時、QImageのコンストラクタの第五引数に対して、フォーマットの情報を渡します。
例えば、24bitの画像に対しては、QtGui.QImage.Format_RGB888を渡します。
変換の目安としては、PILの場合、"L"が8bitを、”RGB"が24bitを、"RGBA"が32bitを表わし、modeを取得して、"L"か"RGB"か、"RGBA"かで適用するフォーマットを分けていました。
#filenameはimageの名前あるいはディレクトリ
im = Image.open(filename)
print(im.mode)
data = np.array(im)
if im.mode == "RGB":
qimagein = QtGui.QImage(data.data, data.shape[1], data.shape[0], data.strides[0], QtGui.QImage.Format_RGB888)
elif im.mode == "RGBA":
qimagein = QtGui.QImage(data.data, data.shape[1], data.shape[0], data.strides[0], QtGui.QImage.Format_RGB32)
elif im.mode == "1":
qimagein = QtGui.QImage(data.data, data.shape[1], data.shape[0], data.strides[0], QtGui.QImage.Format_Mono)
elif im.mode == "L":
qimagein = QtGui.QImage(data.data, data.shape[1], data.shape[0], data.strides[0], QtGui.QImage.Format_Indexed8)
elif im.mode == "P":
qimagein = QtGui.QImage(data.data, data.shape[1], data.shape[0], data.strides[0], QtGui.QImage.Format_Indexed8)
この時、PというModeが帰って来たものですから、Pillowのチートシートで確認したところ、
8bitだけれども、パレットモードだということです。
これがオリジナルの8bitのイメージなのですけれども、

上記の処理に載せた後に、イメージを描画すると、

こんな感じでモノクロになります。
8ビットを描画するために指定するフォーマットとしては、
Format_Indexed8くらいしかなさそうなんですけれども、
あきらめるしかないでしょうか?
PySide QImage
Pillowの公式サイトで、PillowはQt系のImageコンストラクタの処理と連携しており、
"1","L","P","RGB","RGBA"の5つのモードには対応している。
これ以外のモードを扱うには、convertを行えと書いてあるのですが、
"P"も対応しているようです。しかし、肝心の、どのフォーマットに当てはめればいいのかが
わかりません。
"RGB"の場合は問題ないのですが、"RGBA"の場合だと、若干色が変化することもあります。
例えば、

が、RGBAとして割り振られたコードを追加した後だと、

こんな風に、一部の色が完全に違うものになってしまいます。
これはどうしてなのかも知りたいです。
Pillow ImageQt Module
1.8bitのパレットモードの画像を、オリジナルと同様に表示する方法
2.RGBAの場合に色が変化する原因と、対処法