From 9a61c3dbf664dbfa3dd0b9dcd4f6558dd40679d2 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sun, 28 Nov 2021 12:04:27 -0500 Subject: [PATCH] Use cammy_image_point, region types for copy ops --- bin/tile.c | 22 +++++++++++++++++---- include/cammy/image.h | 8 ++------ src/image.c | 46 ++++++++++++++++++++++++------------------- 3 files changed, 46 insertions(+), 30 deletions(-) diff --git a/bin/tile.c b/bin/tile.c index ceca8d8..896098a 100644 --- a/bin/tile.c +++ b/bin/tile.c @@ -49,6 +49,14 @@ int cammy_tile_import(int argc, char **argv) { cammy_image *dest, *src; int photo; + cammy_image_point to = { + 0, 0 + }; + + cammy_image_region from = { + 16, 16, CAMMY_PHOTO_WIDTH, CAMMY_PHOTO_HEIGHT + }; + if (argc < 2) { import_usage(argc, argv, "No camera SRAM file provided"); } else if (argc < 3) { @@ -88,8 +96,7 @@ int cammy_tile_import(int argc, char **argv) { dest->width = CAMMY_PHOTO_WIDTH; dest->height = CAMMY_PHOTO_HEIGHT; - cammy_image_copy(dest, src, - 0, 0, 16, 16, CAMMY_PHOTO_WIDTH, CAMMY_PHOTO_HEIGHT); + cammy_image_copy(dest, src, &to, &from); free(dest); @@ -132,6 +139,14 @@ int cammy_tile_export(int argc, char **argv) { cammy_image *dest, *src; int photo; + cammy_image_point to = { + 16, 16 + }; + + cammy_image_region from = { + 0, 0, CAMMY_PHOTO_WIDTH, CAMMY_PHOTO_HEIGHT + }; + if (argc < 2) { export_usage(argc, argv, "No camera SRAM file provided"); } else if (argc < 3) { @@ -178,8 +193,7 @@ int cammy_tile_export(int argc, char **argv) { memset(dest->buf, '\0', dest->size); - cammy_image_copy(dest, src, - 16, 16, 0, 0, CAMMY_PHOTO_WIDTH, CAMMY_PHOTO_HEIGHT); + cammy_image_copy(dest, src, &to, &from); if (cammy_image_save_tile(dest, argv[4]) < 0) { fprintf(stderr, "%s: %s: %s: %s\n", diff --git a/include/cammy/image.h b/include/cammy/image.h index 118b3b4..c8dd857 100644 --- a/include/cammy/image.h +++ b/include/cammy/image.h @@ -101,12 +101,8 @@ void cammy_image_merge_tiles(uint8_t *dest, void cammy_image_copy(cammy_image *dest, cammy_image *src, - size_t x_dest, - size_t y_dest, - size_t x_src, - size_t y_src, - size_t width, - size_t height); + cammy_image_point *to, + cammy_image_region *from); int cammy_image_slice(uint8_t *buf, size_t width, diff --git a/src/image.c b/src/image.c index 0ab6bbd..7080171 100644 --- a/src/image.c +++ b/src/image.c @@ -410,44 +410,50 @@ void cammy_image_merge_tiles(uint8_t *dest, } } -void cammy_image_copy(cammy_image *dest, +static void copy_2bpp(cammy_image *dest, cammy_image *src, - size_t x_dest, - size_t y_dest, - size_t x_src, - size_t y_src, - size_t width, - size_t height) { + cammy_image_point *to, + cammy_image_region *from) { size_t x_offset, y_offset; - if (dest->format != CAMMY_IMAGE_2BPP_TILE - || src->format != CAMMY_IMAGE_2BPP_TILE) { - return; - } - - for (y_offset=0; y_offset dest->height) { + for (y_offset=0; y_offset < from->height; y_offset++) { + if (to->y + y_offset > dest->height) { break; } - for (x_offset=0; x_offsettiles, x_src + x_offset, - y_src + y_offset, + for (x_offset=0; x_offset < from->width; x_offset++) { + uint8_t value = tile_read(src->tiles, from->x + x_offset, + from->y + y_offset, src->width); - if (x_dest + x_offset > dest->width) { + if (to->x + x_offset > dest->width) { break; } - tile_write(dest->tiles, x_dest + x_offset, - y_dest + y_offset, + tile_write(dest->tiles, to->x + x_offset, + to->y + y_offset, dest->width, value); } } } +void cammy_image_copy(cammy_image *dest, + cammy_image *src, + cammy_image_point *to, + cammy_image_region *from) { + if (src->format == dest->format) { + switch (src->format) { + case CAMMY_IMAGE_2BPP_TILE: + copy_2bpp(dest, src, to, from); break; + + default: + break; + } + } +} + static int save_tile_to_file(cammy_tile *tiles, size_t width, size_t height, int file) {