PyQt5 устанавливает пиксель RGBA в массиве NumPy

1

Я пытаюсь установить пиксели в определенное значение RGBA с помощью массива numpy. Im использует 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_())
Теги:
numpy
pyqt5

1 ответ

2
Лучший ответ

У вас есть правильная идея!

То, что вам не хватает, это то, что значения RGB 255 255,255 являются белыми, а не черными. Кроме того, прозрачность оси "A" идет от 0 до 255, где 0 непрозрачна и 255 полностью прозрачна.

Примеры:

  • Если значения RGBA (255,255,255,0), то вы увидите черный. Это связано с тем, что прозрачность установлена равной 0.
  • Если значения RGBA (255,255,255,255), то вы увидите белый цвет.
  • Если значения RGBA (135, 23, 53, 255), то вы увидите темно-красный (ваш пример в коде).

Небольшая вещь для видимости, рассмотрите установку тестового патча, а не тестового пикселя, например:

self.world[20:40, 30:50, :] = [135, 23, 53, 128]
  • 0
    большое Вам спасибо ;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню