2022年6月11日土曜日

c++ html color からRGBへ変換

見たらなかったので改変、自作しました。140種類の色に対応しています。色名からRGB形式のstring(Ex. (255,255,255))に変換しています。見つからなかったなら白を返します。

//
//  HTML color names, in both the RGB 888 (24 bit) and RGB 565 (16 bit) spaces.  All
//  values taken from https://en.wikipedia.org/wiki/Web_colors#X11_color_names
//
//  MIT LICENSE
//
//
//  Copyright 2020 M Hotchin
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy of this
//  software and associated documentation files(the "Software"), to deal in the Software
//  without restriction, including without limitation the rights to use, copy, modify,
//  merge, publish, distribute, sublicense, and/or sell copies of the Software, andto
//  permit persons to whom the Software is furnished to do so, subject to the following
//  conditions :
//
//  The above copyright notice and this permission notice shall be included in all copies
//  or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
//  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
//  PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
//  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
//  CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
//  OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
namespace RGB565
{
	 
struct ColorStruct{
	char name[25];
	int R;
	int G;	
	int B;
};	
	
struct ColorStruct color_table[] = {
	// Pink colors
	 {"Pink            ",0xFF, 0xC0, 0xCB},
	 {"LightPink       ",0xFF, 0xB6, 0xC1},
	 {"HotPink         ",0xFF, 0x69, 0xB4},
	 {"DeepPink        ",0xFF, 0x14, 0x93},
	 {"PaleVioletRed   ",0xDB, 0x70, 0x93},
	 {"MediumVioletRed ",0xC7, 0x15, 0x85},





	 // Red colors
	  {"LightSalmon ",0xFF, 0xA0, 0x7A},
	  {"Salmon      ",0xFA, 0x80, 0x72},
	  {"DarkSalmon  ",0xE9, 0x96, 0x7A},
	  {"LightCoral  ",0xF0, 0x80, 0x80},
	  {"IndianRed   ",0xCD, 0x5C, 0x5C},
	  {"Crimson     ",0xDC, 0x14, 0x3C},
	  {"Firebrick   ",0xB2, 0x22, 0x22},
	  {"DarkRed     ",0x8B, 0x00, 0x00},
	  {"Red         ",0xFF, 0x00, 0x00},

	  // Orange colors
	   {"OrangeRed  ",0xFF, 0x45, 0x00},
	   {"Tomato     ",0xFF, 0x63, 0x47},
	   {"Coral      ",0xFF, 0x7F, 0x50},
	   {"DarkOrange ",0xFF, 0x8C, 0x00},
	   {"Orange     ",0xFF, 0xA5, 0x00},

	   // Yellow colors
		{"Yellow               ",0xFF, 0xFF, 0x00},
		{"LightYellow          ",0xFF, 0xFF, 0xE0},
		{"LemonChiffon         ",0xFF, 0xFA, 0xCD},
		{"LightGoldenrodYellow ",0xFA, 0xFA, 0xD2},
		{"PapayaWhip           ",0xFF, 0xEF, 0xD5},
		{"Moccasin             ",0xFF, 0xE4, 0xB5},
		{"PeachPuff            ",0xFF, 0xDA, 0xB9},
		{"PaleGoldenrod        ",0xEE, 0xE8, 0xAA},
		{"Khaki                ",0xF0, 0xE6, 0x8C},
		{"DarkKhaki            ",0xBD, 0xB7, 0x6B},
		{"Gold                 ",0xFF, 0xD7, 0x00},

		// Brown colors
		 {"Cornsilk       ",0xFF, 0xF8, 0xDC},
		 {"BlanchedAlmond ",0xFF, 0xEB, 0xCD},
		 {"Bisque         ",0xFF, 0xE4, 0xC4},
		 {"NavajoWhite    ",0xFF, 0xDE, 0xAD},
		 {"Wheat          ",0xF5, 0xDE, 0xB3},
		 {"Burlywood      ",0xDE, 0xB8, 0x87},
		 {"Tan            ",0xD2, 0xB4, 0x8C},
		 {"RosyBrown      ",0xBC, 0x8F, 0x8F},
		 {"SandyBrown     ",0xF4, 0xA4, 0x60},
		 {"Goldenrod      ",0xDA, 0xA5, 0x20},
		 {"DarkGoldenrod  ",0xB8, 0x86, 0x0B},
		 {"Peru           ",0xCD, 0x85, 0x3F},
		 {"Chocolate      ",0xD2, 0x69, 0x1E},
		 {"SaddleBrown    ",0x8B, 0x45, 0x13},
		 {"Sienna         ",0xA0, 0x52, 0x2D},
		 {"Brown          ",0xA5, 0x2A, 0x2A},
		 {"Maroon         ",0x80, 0x00, 0x00},

		 // Green colors
		  {"DarkOliveGreen    ", 0x55, 0x6B, 0x2F},
		  {"Olive             ", 0x80, 0x80, 0x00},
		  {"OliveDrab         ", 0x6B, 0x8E, 0x23},
		  {"YellowGreen       ", 0x9A, 0xCD, 0x32},
		  {"LimeGreen         ", 0x32, 0xCD, 0x32},
		  {"Lime              ", 0x00, 0xFF, 0x00},
		  {"LawnGreen         ", 0x7C, 0xFC, 0x00},
		  {"Chartreuse        ", 0x7F, 0xFF, 0x00},
		  {"GreenYellow       ", 0xAD, 0xFF, 0x2F},
		  {"SpringGreen       ", 0x00, 0xFF, 0x7F},
		  {"MediumSpringGreen ", 0x00, 0xFA, 0x9A},
		  {"LightGreen        ", 0x90, 0xEE, 0x90},
		  {"PaleGreen         ", 0x98, 0xFB, 0x98},
		  {"DarkSeaGreen      ", 0x8F, 0xBC, 0x8F},
		  {"MediumAquamarine  ", 0x66, 0xCD, 0xAA},
		  {"MediumSeaGreen    ", 0x3C, 0xB3, 0x71},
		  {"SeaGreen          ", 0x2E, 0x8B, 0x57},
		  {"ForestGreen       ", 0x22, 0x8B, 0x22},
		  {"Green             ", 0x00, 0x80, 0x00},
		  {"DarkGreen         ", 0x00, 0x64, 0x00},

		  // Cyan colors
		   {"Aqua            ",0x00, 0xFF, 0xFF},
		   {"Cyan            ",0x00, 0xFF, 0xFF},
		   {"LightCyan       ",0xE0, 0xFF, 0xFF},
		   {"PaleTurquoise   ",0xAF, 0xEE, 0xEE},
		   {"Aquamarine      ",0x7F, 0xFF, 0xD4},
		   {"Turquoise       ",0x40, 0xE0, 0xD0},
		   {"MediumTurquoise ",0x48, 0xD1, 0xCC},
		   {"DarkTurquoise   ",0x00, 0xCE, 0xD1},
		   {"LightSeaGreen   ",0x20, 0xB2, 0xAA},
		   {"CadetBlue       ",0x5F, 0x9E, 0xA0},
		   {"DarkCyan        ",0x00, 0x8B, 0x8B},
		   {"Teal            ",0x00, 0x80, 0x80},

		   // Blue colors
			{"LightSteelBlue ",0xB0, 0xC4, 0xDE},
			{"PowderBlue     ",0xB0, 0xE0, 0xE6},
			{"LightBlue      ",0xAD, 0xD8, 0xE6},
			{"SkyBlue        ",0x87, 0xCE, 0xEB},
			{"LightSkyBlue   ",0x87, 0xCE, 0xFA},
			{"DeepSkyBlue    ",0x00, 0xBF, 0xFF},
			{"DodgerBlue     ",0x1E, 0x90, 0xFF},
			{"CornflowerBlue ",0x64, 0x95, 0xED},
			{"SteelBlue      ",0x46, 0x82, 0xB4},
			{"RoyalBlue      ",0x41, 0x69, 0xE1},
			{"Blue           ",0x00, 0x00, 0xFF},
			{"MediumBlue     ",0x00, 0x00, 0xCD},
			{"DarkBlue       ",0x00, 0x00, 0x8B},
			{"Navy           ",0x00, 0x00, 0x80},
			{"MidnightBlue   ",0x19, 0x19, 0x70},

			// Purple, violet, and magenta
			 {"Lavender        ",0xE6, 0xE6, 0xFA},
			 {"Thistle         ",0xD8, 0xBF, 0xD8},
			 {"Plum            ",0xDD, 0xA0, 0xDD},
			 {"Violet          ",0xEE, 0x82, 0xEE},
			 {"Orchid          ",0xDA, 0x70, 0xD6},
			 {"Fuchsia         ",0xFF, 0x00, 0xFF},
			 {"Magenta         ",0xFF, 0x00, 0xFF},
			 {"MediumOrchid    ",0xBA, 0x55, 0xD3},
			 {"MediumPurple    ",0x93, 0x70, 0xDB},
			 {"BlueViolet      ",0x8A, 0x2B, 0xE2},
			 {"DarkViolet      ",0x94, 0x00, 0xD3},
			 {"DarkOrchid      ",0x99, 0x32, 0xCC},
			 {"DarkMagenta     ",0x8B, 0x00, 0x8B},
			 {"Purple          ",0x80, 0x00, 0x80},
			 {"Indigo          ",0x4B, 0x00, 0x82},
			 {"DarkSlateBlue   ",0x48, 0x3D, 0x8B},
			 {"SlateBlue       ",0x6A, 0x5A, 0xCD},
			 {"MediumSlateBlue ",0x7B, 0x68, 0xEE},

			 // White colors
			 {"White          ",0xFF, 0xFF, 0xFF},
			 {"Snow           ",0xFF, 0xFA, 0xFA},
			 {"Honeydew       ",0xF0, 0xFF, 0xF0},
			 {"MintCream      ",0xF5, 0xFF, 0xFA},
			 {"Azure          ",0xF0, 0xFF, 0xFF},
			 {"AliceBlue      ",0xF0, 0xF8, 0xFF},
			 {"GhostWhite     ",0xF8, 0xF8, 0xFF},
			 {"WhiteSmoke     ",0xF5, 0xF5, 0xF5},
			 {"Seashell       ",0xFF, 0xF5, 0xEE},
			 {"Beige          ",0xF5, 0xF5, 0xDC},
			 {"OldLace        ",0xFD, 0xF5, 0xE6},
			 {"FloralWhite    ",0xFF, 0xFA, 0xF0},
			 {"Ivory          ",0xFF, 0xFF, 0xF0},
			 {"AntiqueWhite   ",0xFA, 0xEB, 0xD7},
			 {"Linen          ",0xFA, 0xF0, 0xE6},
			 {"LavenderBlush  ",0xFF, 0xF0, 0xF5},
			 {"MistyRose      ",0xFF, 0xE4, 0xE1},

			 // Gray and black colors
			  {"Gainsboro     ",0xDC, 0xDC, 0xDC},
			  {"LightGray     ",0xD3, 0xD3, 0xD3},
			  {"Silver        ",0xC0, 0xC0, 0xC0},
			  {"DarkGray      ",0xA9, 0xA9, 0xA9},
			  {"Gray          ",0x80, 0x80, 0x80},
			  {"DimGray       ",0x69, 0x69, 0x69},
			  {"LightSlateGray",0x77, 0x88, 0x99},
			  {"SlateGray     ",0x70, 0x80, 0x90},
			  {"DarkSlateGray ",0x2F, 0x4F, 0x4F},
			  {"Black         ",0x00, 0x00, 0x00}
	 };
}        

string constraints::convert_color_name_to_rgb(string color_name)
{

	auto iter = color_name.find(",");
	if (iter != string::npos) {
		return color_name;
	}
	
	for (auto j = 0; j < sizeof(RGB565::color_table) / sizeof(RGB565::ColorStruct); j++) {
		string dest_name = RGB565::color_table[j].name;
		bool fail = false;
		for (auto m = 0; m < color_name.size(); m++) {
			
			if (tolower(color_name[m]) != tolower(dest_name[m])) {
				fail=true;
				break;
			}
		}
		if (!fail) {
			string s =  std::to_string(RGB565::color_table[j].R) + ",";
			s += std::to_string(RGB565::color_table[j].G) + ",";
			s += std::to_string(RGB565::color_table[j].B) ;
			return s;
		}
	}
	return "255,255,255";

}

これを、通すと、色名は、全て、RGB形式stringとなります

#shiftdef
shiftdef={'公休':('休み',公休),'希望休':('休',希望休),'有給':('有',有給),'業務':('業務',業務),'業務なし日勤':('・',業務なし日勤),'産休':('産',産休)}
shift_label_color_map={'公休':[('休み','245,245,245'),('','128,128,128'),('','128,128,128')],'希望休':[('休','173,255,47'),('','128,128,128'),('','128,128,128')],'有給':[('有','128,128,128'),('','128,128,128'),('','128,128,128')],'業務':[('業務','255,224,192'),('業務AM','255,192,128'),('業務PM','255,128,0')],'業務なし日勤':[('・','211,211,211'),('','128,128,128'),('','128,128,128')],'産休':[('産','128,128,128'),('出張','128,128,128'),('','128,128,128')]}
#taskdef
taskdef={'日直':日直,'振替休日':振替休日,'当直':当直,'セカンド':セカンド,'遅':遅,'Dummy':Dummy,'DummyDay':DummyDay,'臨出':臨出}
task_label_color_map={'日直':[('日','255,192,192'),('','128,128,128')],'振替休日':[('振休','238,130,238'),('','128,128,128')],'当直':[('当','192,192,0'),('','128,128,128')],'セカンド':[('セ','192,255,255'),('','128,128,128')],'遅':[('遅','128,255,128'),('','128,128,128')],'Dummy':[('.','224,224,224'),('夜勤禁','128,128,255')],'DummyDay':[('.','255,255,255'),('','128,128,255')],'臨出':[('臨','255,128,0'),('','128,128,128')]}

0 件のコメント:

コメントを投稿