Beispiel #1
0
    def __init__(self, source: BLImage) -> None:
        if source is None:
            raise ValueError("Argument 'source' is required.")

        super().__init__()

        (width, height) = source.size

        self._size = Dimension(width, height)
        self._source = source

        pixels = source.pixels[:]

        channels = 4
        length = width * height

        def load_image() -> Iterable[int]:
            for i in range(0, length):
                offset = i * channels

                r = pixels[offset]
                g = pixels[offset + 1]
                b = pixels[offset + 2]
                a = pixels[offset + 3]

                yield int(b * 255)
                yield int(g * 255)
                yield int(r * 255)
                yield int(a * 255)

        data = bytearray(load_image())

        pattern = ImageSurface.create_for_data(data, FORMAT_ARGB32, width,
                                               height)

        self._surface = ImageSurface(FORMAT_ARGB32, width, height)

        ctx = Graphics(self._surface)

        m = Matrix()
        m.translate(0, height)
        m.scale(1, -1)

        ctx.set_matrix(m)
        ctx.set_source_surface(pattern)
        ctx.paint()

        self.surface.flush()

        pattern.finish()
 def draw_text(ctx: Context, text: str, x: float, y: float, scale: float):
     original = ctx.get_matrix()
     ctx.translate(x, y)
     ctx.scale(scale / 10)  # Default font size is 10 mm (1cm)
     ctx.show_text(text)
     ctx.set_matrix(original)