diff --git a/editor/editor.py b/editor/editor.py new file mode 100644 index 0000000..550a81e --- /dev/null +++ b/editor/editor.py @@ -0,0 +1,79 @@ +import math +import sys + +from PIL import Image +from PyQt5.QtCore import Qt +from PyQt5.QtGui import QPixmap, QImage, qRgb +from PyQt5.QtWidgets import ( + QApplication, + QLabel, + QMainWindow +) + +class Surface: + def __init__(self, image_file): + im = Image.open(image_file) + self.pixels = im.tobytes() + self.w = im.width + self.h = im.height + +class Palette: + def __init__(self, image_file): + im = Image.open(image_file) + pal = im.getpalette() + pal_size = math.floor(len(pal)/3) + self.colors = [] + for i in range(pal_size): + self.colors.append(qRgb(pal[i*3],pal[1+i*3],pal[2+i*3])) + +class Canvas: + def __init__(self, palette): + # Crear el QImage + self.img = QImage(320, 240, QImage.Format.Format_Indexed8) + + # Omplir la paleta + for i in range(len(palette.colors)): + self.img.setColor(i, palette.colors[i]) + + for y in range(240): + for x in range(320): + self.img.setPixel(x,y,20) + + # Preparem els indices de sustitucio de la paleta + self.pal = bytearray(256) + for i in range(256): + self.pal[i] = i + + def blt(self, dx, dy, surface, sx, sy, sw, sh, color): + self.pal[1] = color + for y in range(sh): + for x in range(sw): + col = self.pal[surface.pixels[(sx+x)+(sy+y)*surface.w]] + if col != 0: + self.img.setPixel(dx+x,dy+y,col) + self.pal[1] = 1 + +class MainWindow(QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + + self.setWindowTitle("My App") + + label = QLabel("Hello") + + surface = Surface("data/gat.gif") + paleta = Palette("data/test.gif") + canvas = Canvas(paleta) + canvas.blt(10, 10, surface, 0, 0, 22, 35, 18) + + label.setPixmap(QPixmap.fromImage(canvas.img).scaled(640,480, Qt.IgnoreAspectRatio, Qt.FastTransformation)) + + label.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) + label.setScaledContents(True) + self.setCentralWidget(label) + +app = QApplication(sys.argv) +window = MainWindow() +window.show() +app.exec() +