Ensure pixel coordinates are within bounds
This commit is contained in:
parent
6d6d4781ff
commit
6c275baa20
20
src/img.c
20
src/img.c
@ -7,7 +7,7 @@
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user