Skip to content

Commit b236966

Browse files
authored
Merge pull request #50 from Johennes/feature/subscreen
Allow image drawing in subscreen areas
2 parents 611c84c + d7d88d8 commit b236966

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

adafruit_rgb_display/rgb.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,10 @@ def pixel(self, x, y, color=None):
175175
self._block(x, y, x, y, self._encode_pixel(color))
176176
return None
177177

178-
def image(self, img, rotation=None):
179-
"""Set buffer to value of Python Imaging Library image. The image should
180-
be in 1 bit mode and a size equal to the display size."""
178+
def image(self, img, rotation=None, x=0, y=0):
179+
"""Set buffer to value of Python Imaging Library image. The image should
180+
be in 1 bit mode and a size not exceeding the display size when drawn at
181+
the supplied origin."""
181182
if rotation is None:
182183
rotation = self.rotation
183184
if not img.mode in ('RGB', 'RGBA'):
@@ -187,20 +188,20 @@ def image(self, img, rotation=None):
187188
if rotation != 0:
188189
img = img.rotate(rotation, expand=True)
189190
imwidth, imheight = img.size
190-
if imwidth != self.width or imheight != self.height:
191-
raise ValueError('Image must be same dimensions as display ({0}x{1}).' \
191+
if x + imwidth > self.width or y + imheight > self.height:
192+
raise ValueError('Image must not exceed dimensions of display ({0}x{1}).' \
192193
.format(self.width, self.height))
193194
if numpy:
194195
pixels = list(image_to_data(img))
195196
else:
196197
# Slower but doesn't require numpy
197-
pixels = bytearray(self.width * self.height * 2)
198-
for x in range(self.width):
199-
for y in range(self.height):
200-
pix = color565(img.getpixel((x, y)))
201-
pixels[2*(y * self.width + x)] = pix >> 8
202-
pixels[2*(y * self.width + x) + 1] = pix & 0xFF
203-
self._block(0, 0, self.width - 1, self.height - 1, pixels)
198+
pixels = bytearray(imwidth * imheight * 2)
199+
for i in range(imwidth):
200+
for j in range(imheight):
201+
pix = color565(img.getpixel((i, j)))
202+
pixels[2*(j * imwidth + i)] = pix >> 8
203+
pixels[2*(j * imwidth + i) + 1] = pix & 0xFF
204+
self._block(x, y, x + imwidth - 1, y + imheight - 1, pixels)
204205

205206
#pylint: disable-msg=too-many-arguments
206207
def fill_rectangle(self, x, y, width, height, color):

0 commit comments

Comments
 (0)