回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我从<code>PIL</code>生成一个<code>QImage</code>的图像对象,并将其显示在屏幕上。在</p>
<p><code>PIL</code>具有“RGB(24位)”、“RGBA(32位)”、“p(8位索引模式(调色板模式)”、“L(8位)”、“1(1位)”图像格式可用于<code>QImage</code>。在</p>
<p>通过与它的连接,<code>QImage</code>还具有“Format_RGB888(24位)”、“Format_ARGB(32位)”、“Format_Indexed8(8位)”、“Format_Mono(1位)”。在</p>
<p>我创建了一个<code>QImage</code>对象,它连接到PIL图像格式。在</p>
<p>例如,当我从PIL-Image获取“RGB”格式时,我在<code>QImage</code>构造函数的第五个上放置一个参数“format_RGB888”,作为QImage“RGB”格式。在</p>
<p>问题是当我得到“p”时,我做一个<code>QImage</code>并显示出来,图像总是变为灰度。在</p>
<p>我指定“Format_Indexed8”,因为“p”是8位深度,<code>QImage</code>格式中没有其他可采用的格式。在</p>
<p>这是8位图像,PIL格式的“p”。在</p>
<p><a href="https://i.stack.imgur.com/YNeG2.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/YNeG2.png" alt="Flag_Of_Debar.png"/></a></p>
<p>此图像的名称是_德巴尔.png. 在</p>
<p>但作为执行的结果,图像被改为它。在</p>
<p><a href="https://i.stack.imgur.com/wHphV.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/wHphV.png" alt="enter image description here"/></a></p>
<p>我用PIL格式分隔代码如下。
除了“P”,没问题</p>
<p>为什么8位“p”模式的PIL图像变为灰度?在</p>
<p>我该怎么办?在</p>
<pre><code>from PySide import QtGui,QtCore
import os,sys
from PIL import Image
import numpy as np
import io
def main():
app = QtGui.QApplication(sys.argv)
directory = os.path.join(os.getcwd(),"\\icons\\")
filename = QtGui.QFileDialog().getOpenFileName(None,"select icon",directory,"(*.png *.jpg *.bmp *.gif)","(*.png *.jpg *.bmp *.gif)")[0]
im = Image.open(filename)
print(im.mode)
data = np.array(im)
img_buffer = io.BytesIO()
im.save(img_buffer,"BMP")
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_ARGB32)
#for avoiding RGB BGR change problem
qimagein.loadFromData(img_buffer.getvalue(), "BMP")
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)
w = QtGui.QLabel()
pix = QtGui.QPixmap.fromImage(qimagein)
w.setPixmap(pix)
w.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
</code></pre>