@myqwrtam

Как нарисовать пиксельное изображение в Python?

Здравствуйте, мне нужна библиотека, фреймворк или просто алгоритм рисования пикселей с помощью python, с возможностью масштабирования изображения...

Например:
Есть двумерный массив 4x4...
И в каждой "ячейке" имеется код (rgb, hex или иной), который обозначает цвет, и по этому массиву рисуется "рисунок", который можно будет посмотреть...
А так же нужно чтобы массив мог меняться по ходу программы и так же рисунок, соответственно...
  • Вопрос задан
  • 3438 просмотров
Пригласить эксперта
Ответы на вопрос 2
@deliro
Pillow
Ответ написан
Комментировать
sanya84
@sanya84
Фанатик Python 3
Для начала)
import sys
import numpy
from PIL import Image
from PIL.ImageQt import ImageQt
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QMessageBox
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import Qt

def log_uncaught_exceptions(ex_cls, ex, tb):
    text = '{}: {}:\n\n'.format(ex_cls.__name__, ex)
    import traceback
    text += ''.join(traceback.format_tb(tb))

    QMessageBox.critical(None, 'Ошибка!', text)
    quit()

sys.excepthook = log_uncaught_exceptions


class ShowImage(QMainWindow):
    def __init__(self):
        super().__init__()
        self.interface()

    def interface(self):
        self.setWindowTitle("Пример рисования изображения")
        self.setGeometry(400, 200, 600, 400)

        pixel = numpy.zeros((10, 10, 3)).astype(int)
        pixel[0][0][2] = 255
        print(pixel)

        image = Image.fromarray(pixel, 'RGB')

        self.image_qt = ImageQt(image)

        pixmap = QPixmap(QImage(self.image_qt))

        label = QLabel(self)
        label.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        label.setStyleSheet("background-color: white")
        label.setGeometry(0, 0, 100, 100)
        label.setPixmap(pixmap)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    my_application = ShowImage()
    my_application.show()
    sys.exit(app.exec_())
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы