我试图从一个numpy数组创建一个QPixmap。numpy数组图像将是2D(即没有颜色信息只是灰度)。
我正在努力使这个answer适应我的需要,但是我不太明白这句话:

b = (255 << 24 | a[:,:,0] << 16 | a[:,:,1] << 8 | a[:,:,2]).flatten() # pack RGB values

有些比特变换正在进行,有些比特变换正在进行,但老实说,我不太明白。
所以我举了个简单的例子如下:
x, y = np.meshgrid(np.arange(1920), np.arange(1080), indexing='ij'); z = np.sin(0.03*x)*np.cos(0.005*y)
imgPNFN = z
if imgPNFN.ndim == 2:
    imgPNFN = imgPNFN[:,:,np.newaxis].repeat(3, 2)
imMin = np.min(imgPNFN)
imDelta = np.max(imgPNFN) - np.min(imgPNFN)
im1 = ((imgPNFN-imMin)/imDelta*255).astype(np.uint32)+1 #<-- had to add 1 for some reason otherwise got weird results...
im2 = 255 << 24 | im1[:,:,0] << 16 | im1[:,:,1] << 8 | im1[:,:,2]
im3 = QtGui.QImage(im2, im2.shape[1], im2.shape[0], QtGui.QImage.Format_RGB32)

但当我的形象是莉娜的时候:
from scipy.misc import lena
l = sp.misc.lena()
imgPNFN = l
#etc...

它不起作用。。。我想这是因为我不了解比特转移的作用。。。另外,如果有更好的方法来做RGB(我复制一些东西来假装我有相同的价值观),如果我能以某种方式避免,那就太好了。
提前谢谢!

最佳答案

我假设您想知道位移位和or-ing发生的原因。好吧,您需要将A[lpha]R[ed]G[reen]B[lue]字节连接在一起,以形成单个整数值。像素数据是一个二维整数数组;标量值。它们不是字节的元组。
例子
颜色:Periwinkle

A: 255 -> 11111111
R: 204 -> 11001100
G: 204 -> 11001100
B: 255 -> 11111111

公式
Value = A << 24 | R << 16 | G << 8 | B

位数学
  11111111000000000000000000000000
          110011000000000000000000
                  1100110000000000
 +                        11111111
 ---------------------------------
  11111111110011001100110011111111

基转换
111111111100110011001100111111112=429161190310
最后
基于上面的位操作,在ARGB中具有100%不透明度的颜色Periwinkle的像素值为4291611903。

10-02 00:47
查看更多