嗨我的程序有一個小問題,但我不明白什麼是錯的。當我嘗試打開圖像時出現錯誤,圖像出現在下方的框中,但顏色錯誤,紅色/黃色/橙色變爲藍色。對不起,我的英文,只看屏幕下。Python庫PIL,加載的圖像是藍色的
我的主要代碼: http://i.stack.imgur.com/O7q26.png
原單:從程序加載後
圖片 http://i.stack.imgur.com/Ztm80.jpg
任何人都知道什麼是錯的?
嗨我的程序有一個小問題,但我不明白什麼是錯的。當我嘗試打開圖像時出現錯誤,圖像出現在下方的框中,但顏色錯誤,紅色/黃色/橙色變爲藍色。對不起,我的英文,只看屏幕下。Python庫PIL,加載的圖像是藍色的
我的主要代碼: http://i.stack.imgur.com/O7q26.png
原單:從程序加載後
圖片 http://i.stack.imgur.com/Ztm80.jpg
任何人都知道什麼是錯的?
誠然,我沒有使用過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格式加載。自然,顏色將會交換。
但是,因爲從截圖看來,只是藍色和紅色正在交換,我猜這裏還有一些endian不匹配,所以你有效地加載它在BGRA格式。 PIL以指定的順序給出字節 - R,G,B,A - 因此QT可能會將每個像素加載爲小端字。改爲嘗試.tobytes('raw', 'BGRA')
。
好的隊友,它的工作:)非常感謝,我錯過了那個小細節。 –
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,BB和AA的立場爲R,G,B值的十六進制表示,一個
它看起來像紅色和藍色像素越來越某處翻轉。看着代碼,我不知道在哪裏。 –
您能否將此作爲一個更簡潔的問題?帶有錯誤的代碼太長而無法搜索錯誤。嘗試將問題隔離到單一方法。 – physicalattraction