PyQt5在numpy数组中设置RGBA像素

时间:2018-09-21 10:08:21

标签: python numpy pyqt5

我正在用numpy数组努力将像素设置为特定的RGBA值。 我正在使用QImage.Format_RGBA8888

当我使用QImage.Format_RGB888进行操作时,它满足了我的要求,但是我想保持透明。

我不确定我忽略了什么?

感谢您的任何建议:)

import sys
from PyQt5 import QtWidgets as qw
from PyQt5 import QtGui as qg
from PyQt5 import QtCore as qc
import numpy as np


class MainWindow(qw.QMainWindow):
    def __init__(self):
        super(qw.QMainWindow, self).__init__()
        self.height = 500
        self.width = 500
        self.setWindowTitle("V.0.0")
        self.setMinimumSize(self.width, self.height)

        # display
        self.display = qw.QLabel()
        self.setCentralWidget(self.display)
        # self.display.setGeometry(qc.QRect(0, 0, self.width, self.height))

        self.background()

        self.display.setPixmap(qg.QPixmap.fromImage(self.world_img))

        self.show()

    def background(self):
        self.world = np.zeros([self.width, self.height, 4], dtype=np.uint8)
        self.world += 255 # should do all black?
        self.world[20, 30, :] = [135, 23, 53, 1]
        self.world[21, 31, :] = [135, 23, 53, 1]
        self.world[22, 32, :] = [135, 23, 53, 1]
        self.world_img = qg.QImage(self.world, self.width, self.height, qg.QImage.Format_RGBA8888)


# Start app
if __name__ == '__main__':
    app = qw.QApplication(sys.argv)
    Game = MainWindow()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:2)

您的想法正确!

您缺少的是255,255,255的RGB值是白色,而不是黑色。同样,透明度“ A”轴的范围是0-255,其中0是不透明的,而255是完全透明的。

示例:

  • 如果RGBA值为(255,255,255,0),则您将看到黑色。这是因为透明度设置为0。
  • 如果RGBA值为(255,255,255,255),则您将看到白色。
  • 如果RGBA值为(135、23、53、255),那么您会看到深红色(代码中的示例)。

对于可见性而言,请考虑设置测试补丁而不是测试像素,例如:

empty_list = []
for i in text.split(" "):
if i.startswith("t"):
    empty_list.append(i)
print(empty_list)