diff --git a/src/img.c b/src/img.c index 12dec1e..51a63f1 100644 --- a/src/img.c +++ b/src/img.c @@ -7,7 +7,7 @@ #include #include -internal u64 calculate_pixel_index(Buffer *buffer, u64 x, u64 y, u64 base_size); +internal i64 calculate_pixel_index(Buffer *buffer, u64 x, u64 y, u64 base_size); bool _init_buffer(Arena *arena, Buffer *buffer, u64 base_size) { if (!arena || !buffer || buffer->width == 0 || buffer->height == 0) { @@ -21,12 +21,20 @@ bool _init_buffer(Arena *arena, Buffer *buffer, u64 base_size) { } u8 *_get_pixel(Buffer *buffer, u64 x, u64 y, u64 base_size) { - u64 idx = calculate_pixel_index(buffer, x, y, base_size); + i64 idx = calculate_pixel_index(buffer, x, y, base_size); + if (idx == -1) { + idx = 0; + } + return ((u8 *)(buffer->buf)) + idx; } void _set_pixel(Buffer *buffer, u64 x, u64 y, void *value, u64 base_size) { - u64 idx = calculate_pixel_index(buffer, x, y, base_size); + i64 idx = calculate_pixel_index(buffer, x, y, base_size); + if (idx == -1) { + return; + } + memcpy(((u8 *)(buffer->buf)) + idx, value, base_size); return; } @@ -75,7 +83,11 @@ void save_image(const Image *img, const char *filename) { write_p7_image(img->width, img->height, (u8 *)(img->buf), filename); } -internal u64 calculate_pixel_index(Buffer *buffer, u64 x, u64 y, +internal i64 calculate_pixel_index(Buffer *buffer, u64 x, u64 y, u64 base_size) { + if (x < 0 || y < 0 || x >= buffer->width || y >= buffer->height) { + return -1; + } + return (y * buffer->width + x) * base_size; }