diff options
| author | Mistivia <i@mistivia.com> | 2025-06-10 07:33:35 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-06-10 07:33:35 +0800 |
| commit | 2a5dcfb26f536d705a8f71548b24b2262ca7715e (patch) | |
| tree | 183a497f90ba1a2c05a37a280a7afbdb91555f9b /src/picture.c | |
| parent | 2aff272bd665705ae70eb7a34fa658e45d65269d (diff) | |
anti alias
Diffstat (limited to 'src/picture.c')
| -rw-r--r-- | src/picture.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/picture.c b/src/picture.c index 52deb0e..ebb1fec 100644 --- a/src/picture.c +++ b/src/picture.c @@ -17,6 +17,11 @@ void delete_picture(Picture pic) { free(pic.buffer); } +Color get_pixel(Picture pic, Vec2i pos) { + int idx = pos.y * pic.width * 3 + pos.x * 3; + return (Color) { pic.buffer[idx+2], pic.buffer[idx+1], pic.buffer[idx] }; +} + void set_pixel(Picture pic, Vec2i pos, Color c) { int idx = pos.y * pic.width * 3 + pos.x * 3; pic.buffer[idx] = c.b; @@ -37,6 +42,21 @@ void normalize_picture(Picture pic) { } } +Picture picture_downscale_2x(Picture pic) { + Picture newpic = new_picture(pic.width / 2, pic.height / 2); + for (int x = 0; x < newpic.width; x++) { + for (int y = 0; y < newpic.height; y++) { + Color pixels[4]; + pixels[0] = get_pixel(pic, (Vec2i){2*x, 2*y}); + pixels[1] = get_pixel(pic, (Vec2i){2*x+1, 2*y}); + pixels[2] = get_pixel(pic, (Vec2i){2*x, 2*y+1}); + pixels[3] = get_pixel(pic, (Vec2i){2*x+1, 2*y+1}); + set_pixel(newpic, (Vec2i){x,y}, pixel_avg4(pixels)); + } + } + return newpic; +} + static bool fwrite_word16le(FILE* fp, uint16_t x) { uint8_t buf[2]; |
