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)