diff --git a/include/cammy/image.h b/include/cammy/image.h index 6b04364..6d271d3 100644 --- a/include/cammy/image.h +++ b/include/cammy/image.h @@ -5,6 +5,10 @@ #include +#define CAMMY_IMAGE_Y_COEFFICIENT_R 0.2126 +#define CAMMY_IMAGE_Y_COEFFICIENT_G 0.7152 +#define CAMMY_IMAGE_Y_COEFFICIENT_B 0.0722 + void cammy_image_dither(uint8_t *dest, uint8_t *src, size_t width, diff --git a/include/cammy/tile.h b/include/cammy/tile.h index 453f1f7..9ad16f2 100644 --- a/include/cammy/tile.h +++ b/include/cammy/tile.h @@ -7,6 +7,12 @@ #define CAMMY_TILE_WIDTH 8 #define CAMMY_TILE_HEIGHT 8 +#define CAMMY_TILE_INDEX(x, y, stride) \ + (((y >> 3) * (stride >> 3)) + (x >> 3)) + +#define CAMMY_TILE_INDEXED(tiles, x, y, stride) \ + (&tiles[CAMMY_TILE_INDEX(x, y, stride)]) + #pragma pack(1) #pragma pack(push) diff --git a/src/image.c b/src/image.c index d829c6f..0446727 100644 --- a/src/image.c +++ b/src/image.c @@ -70,9 +70,9 @@ static uint32_t bayer_matrix[256] = { }; static uint8_t rgb_to_grayscale(uint8_t r, uint8_t g, uint8_t b) { - return (uint8_t)((0.2126 * (float)r) - + (0.7152 * (float)g) - + (0.0722 * (float)b)); + return (uint8_t)((CAMMY_IMAGE_Y_COEFFICIENT_R * (float)r) + + (CAMMY_IMAGE_Y_COEFFICIENT_G * (float)g) + + (CAMMY_IMAGE_Y_COEFFICIENT_B * (float)b)); } static uint8_t rgb_to_tile_2bpp(uint8_t r, uint8_t g, uint8_t b, size_t x, size_t y) { @@ -89,9 +89,7 @@ static inline uint8_t tile_read(cammy_tile *tiles, size_t x, size_t y, int stride) { - size_t index = ((y >> 3) * (stride >> 3)) + (x >> 3); - - cammy_tile *tile = &tiles[index]; + cammy_tile *tile = CAMMY_TILE_INDEXED(tiles, x, y, stride); int tile_x = x & 7, tile_y = y & 7; @@ -107,9 +105,7 @@ static inline void tile_write(cammy_tile *tiles, size_t y, int stride, uint8_t value) { - size_t index = ((y >> 3) * (stride >> 3)) + (x >> 3); - - cammy_tile *tile = &tiles[index]; + cammy_tile *tile = CAMMY_TILE_INDEXED(tiles, x, y, stride); int tile_x = x & 7, tile_y = y & 7;