Source code for luma.core.render

# -*- coding: utf-8 -*-
# Copyright (c) 2017-2022 Richard Hull and contributors
# See LICENSE.rst for details.

from PIL import Image, ImageDraw


[docs] class canvas(object): """ A canvas returns a properly-sized :py:mod:`PIL.ImageDraw` object onto which the caller can draw upon. As soon as the with-block completes, the resultant image is flushed onto the device. By default, any color (other than black) will be `generally` treated as white when displayed on monochrome devices. However, this behaviour can be changed by adding ``dither=True`` and the image will be converted from RGB space into a 1-bit monochrome image where dithering is employed to differentiate colors at the expense of resolution. If a ``background`` parameter is provided, the canvas is based on the given background. This is useful to e.g. write text on a given background image. """ def __init__(self, device, background=None, dither=False): self.draw = None if background is None: self.image = Image.new("RGB" if dither else device.mode, device.size) else: assert background.size == device.size self.image = background.copy() self.device = device self.dither = dither def __enter__(self): self.draw = ImageDraw.Draw(self.image) return self.draw def __exit__(self, type, value, traceback): if type is None: if self.dither: self.image = self.image.convert(self.device.mode) # do the drawing onto the device self.device.display(self.image) del self.draw # Tidy up the resources return False # Never suppress exceptions