19 #ifndef _GDISP_COLORS_H 20 #define _GDISP_COLORS_H 22 #include "../../gfx.h" 24 #if GFX_USE_GDISP || defined(__DOXYGEN__) 26 typedef uint16_t colorformat;
40 #define GDISP_COLORSYSTEM_MASK 0xF000 41 #define GDISP_COLORSYSTEM_RGB 0x2000 42 #define GDISP_COLORSYSTEM_BGR 0x3000 49 #define GDISP_COLORSYSTEM_TRUECOLOR 0x2000 50 #define GDISP_COLORSYSTEM_GRAYSCALE 0x4000 51 #define GDISP_COLORSYSTEM_PALETTE 0x6000 58 #define GDISP_PIXELFORMAT_MONO (GDISP_COLORSYSTEM_GRAYSCALE|0x0001) 59 #define GDISP_PIXELFORMAT_GRAY4 (GDISP_COLORSYSTEM_GRAYSCALE|0x0002) 60 #define GDISP_PIXELFORMAT_GRAY16 (GDISP_COLORSYSTEM_GRAYSCALE|0x0004) 61 #define GDISP_PIXELFORMAT_GRAY256 (GDISP_COLORSYSTEM_GRAYSCALE|0x0008) 62 #define GDISP_PIXELFORMAT_RGB565 (GDISP_COLORSYSTEM_RGB|0x0565) 63 #define GDISP_PIXELFORMAT_BGR565 (GDISP_COLORSYSTEM_BGR|0x0565) 64 #define GDISP_PIXELFORMAT_RGB555 (GDISP_COLORSYSTEM_RGB|0x0555) 65 #define GDISP_PIXELFORMAT_BGR555 (GDISP_COLORSYSTEM_BGR|0x0555) 66 #define GDISP_PIXELFORMAT_RGB888 (GDISP_COLORSYSTEM_RGB|0x0888) 67 #define GDISP_PIXELFORMAT_BGR888 (GDISP_COLORSYSTEM_BGR|0x0888) 68 #define GDISP_PIXELFORMAT_RGB444 (GDISP_COLORSYSTEM_RGB|0x0444) 69 #define GDISP_PIXELFORMAT_BGR444 (GDISP_COLORSYSTEM_BGR|0x0444) 70 #define GDISP_PIXELFORMAT_RGB332 (GDISP_COLORSYSTEM_RGB|0x0332) 71 #define GDISP_PIXELFORMAT_BGR332 (GDISP_COLORSYSTEM_BGR|0x0233) 72 #define GDISP_PIXELFORMAT_RGB233 (GDISP_COLORSYSTEM_RGB|0x0233) 73 #define GDISP_PIXELFORMAT_BGR233 (GDISP_COLORSYSTEM_BGR|0x0332) 74 #define GDISP_PIXELFORMAT_RGB666 (GDISP_COLORSYSTEM_RGB|0x0666) 75 #define GDISP_PIXELFORMAT_BGR666 (GDISP_COLORSYSTEM_BGR|0x0666) 76 #define GDISP_PIXELFORMAT_ERROR 0x0000 83 #define White HTML2COLOR(0xFFFFFF) 84 #define Black HTML2COLOR(0x000000) 85 #define Gray HTML2COLOR(0x808080) 87 #define Blue HTML2COLOR(0x0000FF) 88 #define Red HTML2COLOR(0xFF0000) 89 #define Fuchsia HTML2COLOR(0xFF00FF) 90 #define Magenta Fuchsia 91 #define Green HTML2COLOR(0x008000) 92 #define Yellow HTML2COLOR(0xFFFF00) 93 #define Aqua HTML2COLOR(0x00FFFF) 95 #define Lime HTML2COLOR(0x00FF00) 96 #define Maroon HTML2COLOR(0x800000) 97 #define Navy HTML2COLOR(0x000080) 98 #define Olive HTML2COLOR(0x808000) 99 #define Purple HTML2COLOR(0x800080) 100 #define Silver HTML2COLOR(0xC0C0C0) 101 #define Teal HTML2COLOR(0x008080) 102 #define Orange HTML2COLOR(0xFFA500) 103 #define Pink HTML2COLOR(0xFFC0CB) 104 #define SkyBlue HTML2COLOR(0x87CEEB) 107 #if defined(__DOXYGEN__) 111 #define COLOR_SYSTEM GDISP_COLORSYSTEM_TRUECOLOR 116 #define COLOR_BITS 16 123 #define COLOR_BITS_R 5 124 #define COLOR_BITS_G 6 125 #define COLOR_BITS_B 5 133 #define COLOR_SHIFT_R 11 134 #define COLOR_SHIFT_G 5 135 #define COLOR_SHIFT_B 0 141 #define COLOR_NEEDS_MASK FALSE 146 #define COLOR_MASK 0xFFFF 151 #define COLOR_TYPE uint16_t 156 #define COLOR_TYPE_BITS 16 166 #define LUMA2COLOR(l) ((color_t)((((l) & 0xF8)<<8) | (((l) & 0xFC)<<3) | (((l) & 0xF8)>>3))) 171 #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xF8)<<8) | (((g) & 0xFC)<<3) | (((b) & 0xF8)>>3))) 176 #define HTML2COLOR(h) ((color_t)((((h) & 0xF80000)>>8) | (((h) & 0x00FC00)>>5) | (((h) & 0x0000F8)>>3))) 192 #define LUMA_OF(c) ((RED_OF(c)+((uint16_t)GREEN_OF(c)<<1)+BLUE_OF(c))>>2) 193 #define RED_OF(c) (((c) & 0xF800)>>8) 194 #define GREEN_OF(c) (((c)&0x007E)>>3) 195 #define BLUE_OF(c) (((c)&0x001F)<<3) 212 #define EXACT_LUMA_OF(c) ((EXACT_RED_OF(c)+((uint16_t)EXACT_GREEN_OF(c)<<1)+EXACT_BLUE_OF(c))>>2) 213 #define EXACT_RED_OF(c) (((((c)>>11)&0x1F)*255)/31) 214 #define EXACT_GREEN_OF(c) (((((c)>>5)&0x3F)*255)/63) 215 #define EXACT_BLUE_OF(c) (((((c)>>0)&0x1F)*255)/31) 228 #if GDISP_PIXELFORMAT & GDISP_COLORSYSTEM_TRUECOLOR 229 #define COLOR_SYSTEM GDISP_COLORSYSTEM_TRUECOLOR 232 #define COLOR_BITS_R ((GDISP_PIXELFORMAT>>8) & 0x0F) 233 #define COLOR_BITS_G ((GDISP_PIXELFORMAT>>4) & 0x0F) 234 #define COLOR_BITS_B ((GDISP_PIXELFORMAT>>0) & 0x0F) 235 #define COLOR_BITS (COLOR_BITS_R + COLOR_BITS_G + COLOR_BITS_B) 239 #define COLOR_TYPE uint8_t 240 #define COLOR_TYPE_BITS 8 241 #elif COLOR_BITS <= 16 242 #define COLOR_TYPE uint16_t 243 #define COLOR_TYPE_BITS 16 244 #elif COLOR_BITS <= 32 245 #define COLOR_TYPE uint32_t 246 #define COLOR_TYPE_BITS 32 248 #error "GDISP: Cannot define color types with more than 32 bits" 250 #if COLOR_TYPE_BITS == COLOR_BITS 251 #define COLOR_NEEDS_MASK FALSE 253 #define COLOR_NEEDS_MASK TRUE 255 #define COLOR_MASK() ((1 << COLOR_BITS)-1) 258 #if (GDISP_PIXELFORMAT & GDISP_COLORSYSTEM_MASK) == GDISP_COLORSYSTEM_RGB 259 #define COLOR_SHIFT_R (COLOR_BITS_B+COLOR_BITS_G) 260 #define COLOR_SHIFT_G COLOR_BITS_B 261 #define COLOR_SHIFT_B 0 263 #define COLOR_SHIFT_B (COLOR_BITS_R+COLOR_BITS_G) 264 #define COLOR_SHIFT_G COLOR_BITS_R 265 #define COLOR_SHIFT_R 0 269 #if COLOR_BITS_R + COLOR_SHIFT_R == 8 270 #define RED_OF(c) ((c) & (((1<<COLOR_BITS_R)-1) << COLOR_SHIFT_R)) 271 #define RGB2COLOR_R(r) ((COLOR_TYPE)((r) & (0xFF & ~((1<<(8-COLOR_BITS_R))-1)))) 272 #elif COLOR_BITS_R + COLOR_SHIFT_R > 8 273 #define RED_OF(c) (((c) & (((1<<COLOR_BITS_R)-1) << COLOR_SHIFT_R)) >> (COLOR_BITS_R+COLOR_SHIFT_R-8)) 274 #define RGB2COLOR_R(r) (((COLOR_TYPE)((r) & (0xFF & ~((1<<(8-COLOR_BITS_R))-1)))) << (COLOR_BITS_R+COLOR_SHIFT_R-8)) 275 #else // COLOR_BITS_R + COLOR_SHIFT_R < 8 276 #define RED_OF(c) (((c) & (((1<<COLOR_BITS_R)-1) << COLOR_SHIFT_R)) << (8-(COLOR_BITS_R+COLOR_SHIFT_R))) 277 #define RGB2COLOR_R(r) (((COLOR_TYPE)((r) & (0xFF & ~((1<<(8-COLOR_BITS_R))-1)))) >> (8-(COLOR_BITS_R+COLOR_SHIFT_R))) 279 #if COLOR_BITS_G + COLOR_SHIFT_G == 8 280 #define GREEN_OF(c) ((c) & (((1<<COLOR_BITS_G)-1) << COLOR_SHIFT_G)) 281 #define RGB2COLOR_G(g) ((COLOR_TYPE)((g) & (0xFF & ~((1<<(8-COLOR_BITS_G))-1)))) 282 #elif COLOR_BITS_G + COLOR_SHIFT_G > 8 283 #define GREEN_OF(c) (((c) & (((1<<COLOR_BITS_G)-1) << COLOR_SHIFT_G)) >> (COLOR_BITS_G+COLOR_SHIFT_G-8)) 284 #define RGB2COLOR_G(g) (((COLOR_TYPE)((g) & (0xFF & ~((1<<(8-COLOR_BITS_G))-1)))) << (COLOR_BITS_G+COLOR_SHIFT_G-8)) 285 #else // COLOR_BITS_G + COLOR_SHIFT_G < 8 286 #define GREEN_OF(c) (((c) & (((1<<COLOR_BITS_G)-1) << COLOR_SHIFT_G)) << (8-(COLOR_BITS_G+COLOR_SHIFT_G))) 287 #define RGB2COLOR_G(g) (((COLOR_TYPE)((g) & (0xFF & ~((1<<(8-COLOR_BITS_G))-1)))) >> (8-(COLOR_BITS_G+COLOR_SHIFT_G))) 289 #if COLOR_BITS_B + COLOR_SHIFT_B == 8 290 #define BLUE_OF(c) ((c) & (((1<<COLOR_BITS_B)-1) << COLOR_SHIFT_B)) 291 #define RGB2COLOR_B(b) ((COLOR_TYPE)((b) & (0xFF & ~((1<<(8-COLOR_BITS_B))-1)))) 292 #elif COLOR_BITS_B + COLOR_SHIFT_B > 8 293 #define BLUE_OF(c) (((c) & (((1<<COLOR_BITS_B)-1) << COLOR_SHIFT_B)) >> (COLOR_BITS_B+COLOR_SHIFT_B-8)) 294 #define RGB2COLOR_B(b) (((COLOR_TYPE)((b) & (0xFF & ~((1<<(8-COLOR_BITS_B))-1)))) << (COLOR_BITS_B+COLOR_SHIFT_B-8)) 295 #else // COLOR_BITS_B + COLOR_SHIFT_B < 8 296 #define BLUE_OF(c) (((c) & (((1<<COLOR_BITS_B)-1) << COLOR_SHIFT_B)) << (8-(COLOR_BITS_B+COLOR_SHIFT_B))) 297 #define RGB2COLOR_B(b) (((COLOR_TYPE)((b) & (0xFF & ~((1<<(8-COLOR_BITS_B))-1)))) >> (8-(COLOR_BITS_B+COLOR_SHIFT_B))) 299 #define LUMA_OF(c) ((RED_OF(c)+((uint16_t)GREEN_OF(c)<<1)+BLUE_OF(c))>>2) 300 #define EXACT_RED_OF(c) (((uint16_t)(((c)>>COLOR_SHIFT_R)&((1<<COLOR_BITS_R)-1))*255)/((1<<COLOR_BITS_R)-1)) 301 #define EXACT_GREEN_OF(c) (((uint16_t)(((c)>>COLOR_SHIFT_G)&((1<<COLOR_BITS_G)-1))*255)/((1<<COLOR_BITS_G)-1)) 302 #define EXACT_BLUE_OF(c) (((uint16_t)(((c)>>COLOR_SHIFT_B)&((1<<COLOR_BITS_B)-1))*255)/((1<<COLOR_BITS_B)-1)) 303 #define EXACT_LUMA_OF(c) ((EXACT_RED_OF(c)+((uint16_t)EXACT_GREEN_OF(c)<<1)+EXACT_BLUE_OF(c))>>2) 304 #define LUMA2COLOR(l) (RGB2COLOR_R(l) | RGB2COLOR_G(l) | RGB2COLOR_B(l)) 305 #define RGB2COLOR(r,g,b) (RGB2COLOR_R(r) | RGB2COLOR_G(g) | RGB2COLOR_B(b)) 308 #if COLOR_BITS_R + COLOR_SHIFT_R == 24 309 #define HTML2COLOR_R(h) ((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_R))-1))<<16)) 310 #elif COLOR_BITS_R + COLOR_SHIFT_R > 24 311 #define HTML2COLOR_R(h) (((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_R))-1))<<16)) << (COLOR_BITS_R+COLOR_SHIFT_R-24)) 312 #else // COLOR_BITS_R + COLOR_SHIFT_R < 24 313 #define HTML2COLOR_R(h) (((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_R))-1))<<16)) >> (24-(COLOR_BITS_R+COLOR_SHIFT_R))) 315 #if COLOR_BITS_G + COLOR_SHIFT_G == 16 316 #define HTML2COLOR_G(h) ((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_G))-1))<<8)) 317 #elif COLOR_BITS_G + COLOR_SHIFT_G > 16 318 #define HTML2COLOR_G(h) (((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_G))-1))<<8)) << (COLOR_BITS_G+COLOR_SHIFT_G-16)) 319 #else // COLOR_BITS_G + COLOR_SHIFT_G < 16 320 #define HTML2COLOR_G(h) (((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_G))-1))<<8)) >> (16-(COLOR_BITS_G+COLOR_SHIFT_G))) 322 #if COLOR_BITS_B + COLOR_SHIFT_B == 8 323 #define HTML2COLOR_B(h) ((h) & (0xFFL & ~((1<<(8-COLOR_BITS_B))-1))) 324 #elif COLOR_BITS_B + COLOR_SHIFT_B > 8 325 #define HTML2COLOR_B(h) (((h) & (0xFFL & ~((1<<(8-COLOR_BITS_B))-1))) << (COLOR_BITS_B+COLOR_SHIFT_B-8)) 326 #else // COLOR_BITS_B + COLOR_SHIFT_B < 8 327 #define HTML2COLOR_B(h) (((h) & (0xFFL & ~((1<<(8-COLOR_BITS_B))-1))) >> (8-(COLOR_BITS_B+COLOR_SHIFT_B))) 329 #define HTML2COLOR(h) ((COLOR_TYPE)(HTML2COLOR_R(h) | HTML2COLOR_G(h) | HTML2COLOR_B(h))) 332 #if GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB888 333 #define COLOR_BITS_A 8 334 #define COLOR_SHIFT_A 24 335 #define ALPHA_OF(c) (((c)>>24) ^ 0xFF) 336 #define EXACT_ALPHA_OF(c) ALPHA_OF((c)) 337 #define AHTML2COLOR(h) ((h) ^ 0xFF000000) 338 #define RGB2COLOR_A(a) (((COLOR_TYPE)(((a) ^ 0xFF) & 0xFF)) << 24) 339 #define ARGB2COLOR(a,r,g,b) (RGB2COLOR_A(a) | RGB2COLOR_R(r) | RGB2COLOR_G(g) | RGB2COLOR_B(b)) 340 #define GFXTRANSPARENT (0xFF000000) 346 #elif (GDISP_PIXELFORMAT & GDISP_COLORSYSTEM_MASK) == GDISP_COLORSYSTEM_GRAYSCALE 347 #define COLOR_SYSTEM GDISP_COLORSYSTEM_GRAYSCALE 350 #define COLOR_BITS (GDISP_PIXELFORMAT & 0xFF) 351 #define COLOR_BITS_R COLOR_BITS 352 #define COLOR_BITS_G COLOR_BITS 353 #define COLOR_BITS_B COLOR_BITS 354 #define COLOR_SHIFT_R 0 355 #define COLOR_SHIFT_G 0 356 #define COLOR_SHIFT_B 0 360 #define COLOR_TYPE uint8_t 361 #define COLOR_TYPE_BITS 8 363 #error "GDISP: Cannot define gray-scale color types with more than 8 bits" 365 #if COLOR_TYPE_BITS == COLOR_BITS 366 #define COLOR_NEEDS_MASK FALSE 368 #define COLOR_NEEDS_MASK TRUE 370 #define COLOR_MASK() ((1 << COLOR_BITS)-1) 373 #define RGB2COLOR(r,g,b) (((r)|(g)|(b)) ? 1 : 0) 374 #define LUMA2COLOR(l) ((l) ? 1 : 0) 375 #define HTML2COLOR(h) ((h) ? 1 : 0) 376 #define LUMA_OF(c) ((c) ? 255 : 0) 377 #define EXACT_LUMA_OF(c) LUMA_OF(c) 380 #define RGB2COLOR(r,g,b) ((COLOR_TYPE)(((uint16_t)(r)+(g)+(g)+(b)) >> (10-COLOR_BITS))) 381 #define LUMA2COLOR(l) ((COLOR_TYPE)((l)>>(8-COLOR_BITS))) 382 #define HTML2COLOR(h) ((COLOR_TYPE)(((((h)&0xFF0000)>>16)+(((h)&0x00FF00)>>7)+((h)&0x0000FF)) >> (10-COLOR_BITS))) 383 #define LUMA_OF(c) (((c) & ((1<<COLOR_BITS)-1)) << (8-COLOR_BITS)) 384 #define EXACT_LUMA_OF(c) ((((uint16_t)(c) & ((1<<COLOR_BITS)-1))*255)/((1<<COLOR_BITS)-1)) 387 #define RED_OF(c) LUMA_OF(c) 388 #define GREEN_OF(c) LUMA_OF(c) 389 #define BLUE_OF(c) LUMA_OF(c) 390 #define EXACT_RED_OF(c) EXACT_LUMA_OF(c) 391 #define EXACT_GREEN_OF(c) EXACT_LUMA_OF(c) 392 #define EXACT_BLUE_OF(c) EXACT_LUMA_OF(c) 397 #elif (GDISP_PIXELFORMAT & GDISP_COLORSYSTEM_MASK) == GDISP_COLORSYSTEM_PALETTE 398 #define COLOR_SYSTEM GDISP_COLORSYSTEM_PALETTE 400 #error "GDISP: A palette color system is not currently supported" 406 #error "GDISP: Unsupported color system" #define COLOR_TYPE
The color type.
COLOR_TYPE color_t
The color type definition.