gint/src/image/image_set_pixel.c

27 lines
693 B
C

#include <gint/image.h>
void image_set_pixel(image_t const *img, int x, int y, int value)
{
if(!image_valid(img))
return;
if((unsigned)x >= img->width || (unsigned)y >= img->height)
return;
void *data = img->data + y * img->stride;
uint8_t *data_u8 = data;
uint16_t *data_u16 = data;
if(IMAGE_IS_RGB16(img->format)) {
data_u16[x] = value;
}
else if(IMAGE_IS_P8(img->format)) {
data_u8[x] = value;
}
else if(IMAGE_IS_P4(img->format)) {
if(x & 1)
data_u8[x >> 1] = (data_u8[x >> 1] & 0xf0) | (value & 0x0f);
else
data_u8[x >> 1] = (data_u8[x >> 1] & 0x0f) | (value << 4);
}
}