luxos/SysCore/video/color/color.c

166 lines
4.8 KiB
C

#include <color.h>
#include <stdlib.h>
RGBColor RGBColors_4bpp[] = {{0, 0, 0}, // 00 Black
{0, 0, 127}, // 01 Dark Blue
{0, 127, 0}, // 02 Dark Green
{0, 127, 127}, // 03 Dark Cyan
{127, 0, 0}, // 04 Dark Red
{127, 0, 127}, // 05 Dark Magenta
{127, 127, 0}, // 06 Dark Yellow
{192, 192, 192},// 07 Light Gray
{127, 127, 127},// 08 Dark Gray
{0, 0, 255}, // 09 Blue
{0, 255, 0}, // 10 Green
{0, 255, 255}, // 11 Cyan
{255, 0, 0}, // 12 Red
{255, 0, 255}, // 13 Magenta
{255, 255, 0}, // 14 Yellow
{255, 255, 255} // 15 White
};
RGBColor Convert_1bpp_to_RGB(Color_1Bpp c)
{
unsigned char t = (c) ? 0xFF : 0x00;
RGBColor temp = {t, t, t};
return temp;
}
RGBColor Convert_4bpp_to_RGB(Color_4Bpp c)
{
return RGBColors_4bpp[c];
}
RGBColor Convert_6bpp_to_RGB(Color_6Bpp c)
{
unsigned char R, G, B;
R = (unsigned char) ((unsigned)((c & 0x30)>>4) * 255 / 3 );
G = (unsigned char) ((unsigned)((c & 0x0C)>>2) * 255 / 3 );
B = (unsigned char) ((unsigned) (c & 0x03) * 255 / 3 );
RGBColor ret = {R, G, B};
return ret;
}
RGBColor Convert_8bpp_to_RGB(Color_8Bpp c)
{
unsigned char R, G, B;
R = (unsigned char) ((unsigned)((c & 0xE0)>>5) * 255 / 7 );
G = (unsigned char) ((unsigned)((c & 0x1C)>>2) * 255 / 7 );
B = (unsigned char) ((unsigned) (c & 0x03) * 255 / 3 );
RGBColor ret = {R, G, B};
return ret;
}
RGBColor Convert_15bpp_to_RGB(Color_15Bpp c)
{
unsigned char R, G, B;
R = (unsigned char) ((unsigned)((c & 0x7C00)>>10) * 255 / 31 );
G = (unsigned char) ((unsigned)((c & 0x03E0)>>5) * 255 / 31 );
B = (unsigned char) ((unsigned) (c & 0x001F) * 255 / 31 );
RGBColor ret = {R, G, B};
return ret;
}
RGBColor Convert_16bpp_to_RGB(Color_16Bpp c)
{
unsigned char R, G, B;
R = (unsigned char) ((unsigned)((c & 0xF800)>>11) * 255 / 31 );
G = (unsigned char) ((unsigned)((c & 0x07E0)>>5) * 255 / 63 );
B = (unsigned char) ((unsigned) (c & 0x001F) * 255 / 31 );
RGBColor ret = {R, G, B};
return ret;
}
RGBColor Convert_18bpp_to_RGB(Color_18Bpp c)
{
unsigned char R, G, B;
R = (unsigned char) ((unsigned)(c.R) * 255 / 0x3F );
G = (unsigned char) ((unsigned)(c.G) * 255 / 0x3F);
B = (unsigned char) ((unsigned)(c.B) * 255 / 0x3F);
RGBColor ret = {R, G, B};
return ret;
}
RGBColor Convert_24bpp_to_RGB(Color_24Bpp c)
{
return c;
}
Color_1Bpp Convert_RGB_to_1bpp(RGBColor c)
{
if (((unsigned)c.R + (unsigned)c.G + (unsigned)c.B) / 3 >= 128) return 1;
return 0;
}
Color_4Bpp Convert_RGB_to_4bpp(RGBColor c)
{
int i; int minim = 0xFFFF; int index = 0;
int R, G, B;
for (i = 0; i < 16; i++)
{
R = (int)(c.R) - (int)(RGBColors_4bpp[i].R);
G = (int)(c.G) - (int)(RGBColors_4bpp[i].G);
B = (int)(c.B) - (int)(RGBColors_4bpp[i].B);
R = abs(R) + abs(G) + abs(B);
if (R <= minim) {
minim = R; index = i;
}
}
return index;
}
Color_6Bpp Convert_RGB_to_6bpp(RGBColor c)
{
Color_6Bpp temp = 0; unsigned tmp;
tmp = (unsigned)(c.R) * 3 / 255; temp |= (tmp & 0x03) << 4;
tmp = (unsigned)(c.G) * 3 / 255; temp |= (tmp & 0x03) << 2;
tmp = (unsigned)(c.B) * 3 / 255; temp |= (tmp & 0x03);
return temp;
}
Color_8Bpp Convert_RGB_to_8bpp(RGBColor c)
{
Color_8Bpp temp = 0; unsigned tmp;
tmp = (unsigned)(c.R) * 7 / 255; temp |= (tmp & 0x07) << 5;
tmp = (unsigned)(c.G) * 7 / 255; temp |= (tmp & 0x07) << 2;
tmp = (unsigned)(c.B) * 3 / 255; temp |= (tmp & 0x03);
return temp;
}
Color_15Bpp Convert_RGB_to_15bpp(RGBColor c)
{
Color_15Bpp temp = 0; unsigned tmp;
tmp = (unsigned)(c.R) * 0x1F / 255; temp |= (tmp & 0x1F) << 10;
tmp = (unsigned)(c.G) * 0x1F / 255; temp |= (tmp & 0x1F) << 5;
tmp = (unsigned)(c.B) * 0x1F / 255; temp |= (tmp & 0x1F);
return temp;
}
Color_16Bpp Convert_RGB_to_16bpp(RGBColor c)
{
Color_16Bpp temp = 0; unsigned tmp;
tmp = (unsigned)(c.R) * 0x1F / 255; temp |= (tmp & 0x1F) << 11;
tmp = (unsigned)(c.G) * 0x3F / 255; temp |= (tmp & 0x3F) << 5;
tmp = (unsigned)(c.B) * 0x1F / 255; temp |= (tmp & 0x1F);
return temp;
}
Color_18Bpp Convert_RGB_to_18bpp(RGBColor c)
{
Color_18Bpp temp; unsigned tmp;
tmp = (unsigned)(c.R) * 0x3F / 255; temp.R = (unsigned char)tmp;
tmp = (unsigned)(c.G) * 0x3F / 255; temp.G = (unsigned char)tmp;
tmp = (unsigned)(c.B) * 0x3F / 255; temp.B = (unsigned char)tmp;
return temp;
}
Color_24Bpp Convert_RGB_to_24bpp(RGBColor c)
{
return c;
}