From a59007aef45d903bf17feda631d930c5bbebb862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Tue, 15 Jun 2021 23:52:59 +0200 Subject: [PATCH] feat: add image upscale using nearest-neighbor --- image-viewer/src/image.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/image-viewer/src/image.c b/image-viewer/src/image.c index 74769a5..f37389a 100644 --- a/image-viewer/src/image.c +++ b/image-viewer/src/image.c @@ -124,6 +124,25 @@ static void image_write_downscale(image_t *image, display_t *display, display_set_pixel(display, x + beg_x, y + beg_y, result_display); } } +} +static void image_write_upscale(image_t *image, display_t *display, + image_region_t region, double scale_factor) { + float downscale_factor = 1 / scale_factor; + uint16_t w = region.width, h = region.height; + uint16_t sw = (uint16_t)(scale_factor * w), sh = (uint16_t)(scale_factor * h); + + uint16_t beg_x = (DISPLAY_WIDTH - sw) / 2; + uint16_t beg_y = (DISPLAY_HEIGHT - sh) / 2; + + for (int y = 0; y < sh; y++) { + for (int x = 0; x < sw; x++) { + float px = (downscale_factor * (x + 0.5f)) + region.x; + float py = (downscale_factor * (y + 0.5f)) + region.y; + + display_pixel_t result_display = image_get_pixel(image, px, py); + display_set_pixel(display, x + beg_x, y + beg_y, result_display); + } + } } image_region_t region) { uint16_t w = region.width, h = region.height; -- 2.48.1