1 // Aseprite Document Library 2 // Copyright (c) 2001-2016 David Capello 3 // 4 // This file is released under the terms of the MIT license. 5 // Read LICENSE.txt for more information. 6 7 #ifndef DOC_COLOR_H_INCLUDED 8 #define DOC_COLOR_H_INCLUDED 9 #pragma once 10 11 #include "base/ints.h" 12 13 namespace doc { 14 15 // The greatest int type to storage a color for an image in the 16 // available pixel formats. 17 typedef uint32_t color_t; 18 19 ////////////////////////////////////////////////////////////////////// 20 // RGBA 21 22 const uint32_t rgba_r_shift = 0; 23 const uint32_t rgba_g_shift = 8; 24 const uint32_t rgba_b_shift = 16; 25 const uint32_t rgba_a_shift = 24; 26 27 const uint32_t rgba_r_mask = 0x000000ff; 28 const uint32_t rgba_g_mask = 0x0000ff00; 29 const uint32_t rgba_b_mask = 0x00ff0000; 30 const uint32_t rgba_rgb_mask = 0x00ffffff; 31 const uint32_t rgba_a_mask = 0xff000000; 32 rgba_getr(uint32_t c)33 inline uint8_t rgba_getr(uint32_t c) { 34 return (c >> rgba_r_shift) & 0xff; 35 } 36 rgba_getg(uint32_t c)37 inline uint8_t rgba_getg(uint32_t c) { 38 return (c >> rgba_g_shift) & 0xff; 39 } 40 rgba_getb(uint32_t c)41 inline uint8_t rgba_getb(uint32_t c) { 42 return (c >> rgba_b_shift) & 0xff; 43 } 44 rgba_geta(uint32_t c)45 inline uint8_t rgba_geta(uint32_t c) { 46 return (c >> rgba_a_shift) & 0xff; 47 } 48 rgba(uint8_t r,uint8_t g,uint8_t b,uint8_t a)49 inline uint32_t rgba(uint8_t r, uint8_t g, uint8_t b, uint8_t a) { 50 return ((r << rgba_r_shift) | 51 (g << rgba_g_shift) | 52 (b << rgba_b_shift) | 53 (a << rgba_a_shift)); 54 } 55 rgb_luma(int r,int g,int b)56 inline int rgb_luma(int r, int g, int b) { 57 return (r*2126 + g*7152 + b*722) / 10000; 58 } 59 rgba_luma(uint32_t c)60 inline uint8_t rgba_luma(uint32_t c) { 61 return rgb_luma(rgba_getr(c), rgba_getg(c), rgba_getb(c)); 62 } 63 64 ////////////////////////////////////////////////////////////////////// 65 // Grayscale 66 67 const uint16_t graya_v_shift = 0; 68 const uint16_t graya_a_shift = 8; 69 70 const uint16_t graya_v_mask = 0x00ff; 71 const uint16_t graya_a_mask = 0xff00; 72 graya_getv(uint16_t c)73 inline uint8_t graya_getv(uint16_t c) { 74 return (c >> graya_v_shift) & 0xff; 75 } 76 graya_geta(uint16_t c)77 inline uint8_t graya_geta(uint16_t c) { 78 return (c >> graya_a_shift) & 0xff; 79 } 80 graya(uint8_t v,uint8_t a)81 inline uint16_t graya(uint8_t v, uint8_t a) { 82 return ((v << graya_v_shift) | 83 (a << graya_a_shift)); 84 } 85 gray(uint8_t v)86 inline uint16_t gray(uint8_t v) { 87 return graya(v, 255); 88 } 89 90 } // namespace doc 91 92 #endif 93