Created
January 29, 2020 08:54
-
-
Save thibthibaut/ed7c16159f16b15af88bea3f30beb513 to your computer and use it in GitHub Desktop.
Image stuff
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const uint8_t rb528_table[32] = { | |
0, 8, 16, 25, 33, 41, 49, 58, | |
66, 74, 82, 90, 99, 107, 115, 123, | |
132, 140, 148, 156, 165, 173, 181, 189, | |
197, 206, 214, 222, 230, 239, 247, 255 | |
}; | |
const uint8_t g628_table[64] = { | |
0, 4, 8, 12, 16, 20, 24, 28, | |
32, 36, 40, 45, 49, 53, 57, 61, | |
65, 69, 73, 77, 81, 85, 89, 93, | |
97, 101, 105, 109, 113, 117, 121, 125, | |
130, 134, 138, 142, 146, 150, 154, 158, | |
162, 166, 170, 174, 178, 182, 186, 190, | |
194, 198, 202, 206, 210, 215, 219, 223, | |
227, 231, 235, 239, 243, 247, 251, 255 | |
}; | |
#define RGB565_TO_R5(pix) { \ | |
(uint8_t)(0x1f & ((pix)>>11)) \ | |
} | |
#define RGB565_TO_G6(pix) { \ | |
(uint8_t)(0x3f & ((pix)>>5)) \ | |
} | |
#define RGB565_TO_B5(pix) { \ | |
(uint8_t)(0x1f & (pix) ) \ | |
} | |
typedef enum image_type { | |
GREYSCALE = 0, | |
RGB565, | |
RGB888 | |
} image_type_t; | |
typedef struct image { | |
image_type_t type; | |
uint16_t width; | |
uint16_t height; | |
void *data; | |
} image_t; | |
void resize565_and_convert_to_888(const image_t *src, image_t *dst){ | |
int srcW = src->width; | |
int srcH = src->height; | |
int dstW = dst->width; | |
int dstH = dst->height; | |
int x_ratio = (int)((srcW<<16)/dstW)+1; | |
int y_ratio = (int)((srcH<<16)/dstH)+1; | |
// Get input and output buffers | |
uint16_t* rgb565_buffer = (uint16_t*) &src->data[0]; | |
uint8_t* rgb888_buffer = &dst->data[0]; | |
for (int y=0, i=0; y<dstH; y++) | |
{ | |
int sy = (y*y_ratio)>>16; | |
for (int x=0; x<dstW; x++, i+=3) | |
{ | |
int sx = (x*x_ratio)>>16; | |
uint16_t src_pix = rgb565_buffer[(sy*srcW) + sx]; | |
uint8_t r5 = RGB565_TO_R5(src_pix); | |
uint8_t g6 = RGB565_TO_G6(src_pix); | |
uint8_t b5 = RGB565_TO_B5(src_pix); | |
uint8_t r8 = rb528_table[r5]; | |
uint8_t g8 = g628_table[g6]; | |
uint8_t b8 = rb528_table[b5]; | |
rgb888_buffer[i + 0] = r8; | |
rgb888_buffer[i + 1] = g8; | |
rgb888_buffer[i + 2] = b8; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment