Как преобразовать цвет ColorDialog в цветовой формат KML
Я ищу способ преобразования цветового кода, возвращаемого ColorDialog Box в C#, в цветовой формат, используемый форматами файлов KML/KMZ. Любая информация будет принята с благодарностью!
1 ответ
После нескольких часов исследований я ответил на свой вопрос.
Kml использует 8-значный формат цвета HEX. Традиционный формат Hex для красного выглядит как #FF0000. В Kml красный будет выглядеть так: FFFF0000. Первые 2 цифры обозначают непрозрачность (альфа). Цветовой формат в AABBGGRR. Я искал способ установить цвет, а также непрозрачность и вернуть его в строку для размещения в атрибуте KML. Вот мое решение.
string color
string polyColor;
int opacity;
decimal percentOpacity;
string opacityString;
//This allows the user to set the color with a colorDialog adding the chosen color to a string in HEX (without opacity (BBGGRR))
private void btnColor_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
btnColor.BackColor = colorDialog1.Color;
Color clr = colorDialog1.Color;
color = String.Format("{0:X2}{1:X2}{2:X2}", clr.B, clr.G, clr.R);
}
}
//This method takes the Opacity (0% - 100%) set by a textbox and gets the HEX value. Then adds Opacity to Color and adds it to a string.
private void PolyColor()
{
percentOpacity = ((Convert.ToDecimal(txtOpacity.Text) / 100) * 255);
percentOpacity = Math.Floor(percentOpacity); //rounds down
opacity = Convert.ToInt32(percentOpacity);
opacityString = opacity.ToString("x");
polyColor = opacityString + color;
}
Я открыт для более эффективных способов получить значение цвета
Вот онлайн-конвертер цветов. http://www.zonums.com/gmaps/kml_color/ Две первые цифры обозначают непрозрачность FF -> 100%. Для цветов из HTML в KML RGB инвертируются от первой к последней. https://stackru.com/images/d8ac4c8bfed f734c541ef3d5d2f6219dffe3577a.png
/// Convertion from HTML color to KML Color
/// </summary>
/// <param name="htmlColor"></param>
/// <returns></returns>
public string convertColors_HTML_KML(string htmlColor)
{
List<string> result = new List<string>(Regex.Split(htmlColor, @"(?<=\G.{2})", RegexOptions.Singleline));
return "FF" + result[2] + result[1] + result[0];
}