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/blinka_emoji_rgb888.bmp b/examples/overlay/blinka_emoji_rgb888.bmp new file mode 100644 index 0000000..6a26a1f Binary files /dev/null and b/examples/overlay/blinka_emoji_rgb888.bmp differ 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 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)