From 027bdac00d5c36b9ae43b5427de5424e3d7df5b3 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sat, 24 Feb 2024 11:52:51 -0600 Subject: [PATCH 1/2] add support for overlay_position --- adafruit_pycamera/__init__.py | 18 +++++++++++++++--- examples/overlay/code_select.py | 12 +++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/adafruit_pycamera/__init__.py b/adafruit_pycamera/__init__.py index d019cf5..1c6ad6f 100644 --- a/adafruit_pycamera/__init__.py +++ b/adafruit_pycamera/__init__.py @@ -238,6 +238,8 @@ def __init__(self) -> None: # pylint: disable=too-many-statements self.overlay_transparency_color = None self.overlay_bmp = None self.combined_bmp = None + self.preview_scale = None + self.overlay_position = [None, None] self.splash = displayio.Group() # Reset display and I/O expander @@ -645,6 +647,8 @@ def resolution(self, res): microcontroller.nvm[_NVM_RESOLUTION] = res self._resolution = res self._res_label.text = self.resolutions[res] + _width = int(self.resolutions[self.resolution].split("x")[0]) + self.preview_scale = 240 / _width self.display.refresh() @property @@ -928,8 +932,8 @@ def blit_overlay_into_last_capture(self): bitmaptools.blit( photo_bitmap, self.overlay_bmp, - 0, - 0, + self.overlay_position[0] if self.overlay_position[0] is not None else 0, + self.overlay_position[1] if self.overlay_position[1] is not None else 0, skip_source_index=self.overlay_transparency_color, skip_dest_index=None, ) @@ -1003,8 +1007,16 @@ def blit(self, bitmap, x_offset=0, y_offset=32): bitmaptools.rotozoom( self.combined_bmp, self.overlay_bmp, - scale=0.75, + scale=self.preview_scale, skip_index=self.overlay_transparency_color, + ox=int(self.overlay_position[0] * self.preview_scale) + if self.overlay_position[0] is not None + else None, + oy=int(self.overlay_position[1] * self.preview_scale) + if self.overlay_position[1] is not None + else None, + px=0 if self.overlay_position[0] is not None else None, + py=0 if self.overlay_position[1] is not None else None, ) bitmap = self.combined_bmp diff --git a/examples/overlay/code_select.py b/examples/overlay/code_select.py index 480675e..441433d 100644 --- a/examples/overlay/code_select.py +++ b/examples/overlay/code_select.py @@ -11,7 +11,6 @@ import traceback import adafruit_pycamera # pylint: disable=import-error - pycam = adafruit_pycamera.PyCamera() pycam.mode = 0 # only mode 0 (JPEG) will work in this example @@ -34,6 +33,7 @@ pycam.overlay = f"/sd/overlays/{overlay_files[cur_overlay_idx]}" pycam.overlay_transparency_color = 0xE007 +pycam.overlay_position = [0, 0] overlay_files = os.listdir("/sd/overlays/") cur_overlay_idx = 0 @@ -49,6 +49,16 @@ print(f"changing overlay to {overlay_files[cur_overlay_idx]}") pycam.overlay = f"/sd/overlays/{overlay_files[cur_overlay_idx]}" + if not pycam.down.value: + pycam.overlay_position[1] += 1 * (int(pycam.down.current_duration / 0.3) + 1) + if not pycam.up.value: + pycam.overlay_position[1] -= 1 * (int(pycam.up.current_duration / 0.3) + 1) + + if not pycam.left.value: + pycam.overlay_position[0] -= 1 * (int(pycam.left.current_duration / 0.3) + 1) + if not pycam.right.value: + pycam.overlay_position[0] += 1 * (int(pycam.right.current_duration / 0.3) + 1) + if pycam.shutter.short_count: print("Shutter released") pycam.tone(1200, 0.05) From c6b250216ef9f46f10c96a7712c6132d4897fc0d Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sat, 24 Feb 2024 11:53:47 -0600 Subject: [PATCH 2/2] add blinka emoji to overlays --- examples/overlay/blinka_emoji_rgb888.bmp | Bin 0 -> 49290 bytes .../overlay/blinka_emoji_rgb888.bmp.license | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 examples/overlay/blinka_emoji_rgb888.bmp create mode 100644 examples/overlay/blinka_emoji_rgb888.bmp.license diff --git a/examples/overlay/blinka_emoji_rgb888.bmp b/examples/overlay/blinka_emoji_rgb888.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6a26a1f0d0c3f0e3e7ac691a1bc4405ca0bad605 GIT binary patch literal 49290 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 literal 0 HcmV?d00001 diff --git a/examples/overlay/blinka_emoji_rgb888.bmp.license b/examples/overlay/blinka_emoji_rgb888.bmp.license new file mode 100644 index 0000000..831eb5c --- /dev/null +++ b/examples/overlay/blinka_emoji_rgb888.bmp.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2024 Tim Cocks for Adafruit Industries +# SPDX-License-Identifier: MIT