OSDN Git Service

svn rev.329より移動。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_010 / chnos / color.c
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_010/chnos/color.c b/CHNOSProject/chnos/tolset_chn_000/chnos_010/chnos/color.c
new file mode 100644 (file)
index 0000000..c8faa44
--- /dev/null
@@ -0,0 +1,159 @@
+\r
+#include "core.h"\r
+\r
+uint RGB_Table_08[16] = {\r
+       0x00000000,     //黒\r
+       0x00ff0000,     //赤\r
+       0x0000ff00,     //緑\r
+       0x00ffff00,     //黄\r
+       0x000000ff,     //青\r
+       0x0000ffff,     //水\r
+       0x00ffffff,     //白\r
+       0x00c6c6c6,     //明るい灰色\r
+       0x00840000,     //暗い赤\r
+       0x00008400,     //暗い緑\r
+       0x00848400,     //暗い黄\r
+       0x00000084,     //暗い青\r
+       0x00840084,     //紫\r
+       0x00008484,     //暗い水\r
+       0x00848484      //暗い灰色\r
+};\r
+\r
+ushort RGB_08_To_16(uchar c8)\r
+{\r
+       RGB32 c32;\r
+\r
+       if(c8 < 16){\r
+               c32.c32 = RGB_Table_08[c8];\r
+               return ((c32.bit.r / 7) << 11) | ((c32.bit.g / 7) << (5 + 1) | (c32.bit.b / 7));\r
+       }\r
+\r
+       if(c8 >= 16 + 216){\r
+               return 0x0000;\r
+       }\r
+\r
+       c8 -= 16;\r
+\r
+       c32.bit.b = c8 / 36;\r
+       c8 -= c32.bit.b * 36;\r
+       c32.bit.g = c8 / 6;\r
+       c8 -= c32.bit.g * 6;\r
+       c32.bit.r = c8;\r
+       c32.bit.a = 0x00;\r
+\r
+       return ((c32.bit.r * 6) << 11) | ((c32.bit.g * 6) << (5 + 1) | (c32.bit.b * 6));\r
+}\r
+\r
+uint RGB_08_To_32(uchar c8)\r
+{\r
+       RGB32 c32;\r
+\r
+       if(c8 < 16){\r
+               return RGB_Table_08[c8];\r
+       }\r
+\r
+       if(c8 >= 16 + 216){\r
+               return 0x00000000;\r
+       }\r
+\r
+       c8 -= 16;\r
+\r
+       c32.bit.b = c8 / 36;\r
+       c8 -= c32.bit.b * 36;\r
+       c32.bit.g = c8 / 6;\r
+       c8 -= c32.bit.g * 6;\r
+       c32.bit.r = c8;\r
+       c32.bit.a = 0x00;\r
+\r
+       c32.bit.r *= 51;\r
+       c32.bit.g *= 51;\r
+       c32.bit.b *= 51;\r
+\r
+       return c32.c32;\r
+}\r
+\r
+uchar RGB_16_To_08(ushort c16)\r
+{\r
+       uchar c[3];\r
+\r
+       c[0] = c16 >> (5 + 6);\r
+       c[1] = (c16 & 0x7e0) >> 5;\r
+       c[2] = c16 & 0x1f;\r
+\r
+       c[0] /= 6;\r
+       c[1] /= 12;\r
+       c[2] /= 6;\r
+\r
+       return 16 + c[0] + c[1] * 6 + c[2] * 36;\r
+}\r
+\r
+uint RGB_16_To_32(ushort c16)\r
+{\r
+       uchar c[3];\r
+\r
+       c[0] = c16 >> (5 + 6);\r
+       c[1] = (c16 & 0x7e0) >> 5;\r
+       c[2] = c16 & 0x1f;\r
+\r
+       return (c[0] << (16 + 3)) | (c[1] << (8 + 2)) | (c[2] << 3);\r
+}\r
+\r
+uchar RGB_32_To_08(uint c32)\r
+{\r
+       uchar c8;\r
+       uchar c[4];\r
+\r
+       c[3] = (c32 << 24) >> 24;\r
+       c[2] = (c32 << 16) >> 24;\r
+       c[1] = (c32 <<  8) >> 24;\r
+\r
+       c[1] = c[1] / 51;\r
+       c[2] = c[2] / 51;\r
+       c[3] = c[3] / 51;\r
+\r
+       c8 = (c[1] + c[2] * 6 + c[3] * 36) + 16;\r
+\r
+       return c8;\r
+}\r
+\r
+uchar RGB_32_To_08_xy(uint c32, int x, int y)\r
+{\r
+       static int table[4] = { 3, 1, 0, 2 };\r
+       uchar c8;\r
+       uchar c[4];\r
+       int i;\r
+\r
+       c[3] = (c32 << 24) >> 24;\r
+       c[2] = (c32 << 16) >> 24;\r
+       c[1] = (c32 <<  8) >> 24;\r
+\r
+       x &= 1; /* 偶数か奇数か */\r
+       y &= 1;\r
+\r
+       i = table[x + y * 2];   /* 中間色を作るための定数 */\r
+       c[1] = (c[1] * 21) / 256;       /* これで 0~20 になる */\r
+       c[2] = (c[2] * 21) / 256;\r
+       c[3] = (c[3] * 21) / 256;\r
+       c[1] = (c[1] + i) / 4;  /* これで 0~5 になる */\r
+       c[2] = (c[2] + i) / 4;\r
+       c[3] = (c[3] + i) / 4;\r
+\r
+       c8 = 16 + c[1] + c[2] * 6 + c[3] * 36;\r
+\r
+       return c8;\r
+}\r
+\r
+ushort RGB_32_To_16(uint c32)\r
+{\r
+       ushort c16;\r
+       uchar c[4];\r
+\r
+       c[3] = (c32 << 24) >> 24;\r
+       c[2] = (c32 << 16) >> 24;\r
+       c[1] = (c32 <<  8) >> 24;\r
+\r
+       c16 = ((c[1] >> 3) << 11 | (c[2] >> 2) << 5 | (c[3] >> 3));\r
+       \r
+       return c16;\r
+}\r
+\r