常常在WEB上設定顏色會發現,使用的都是16進制的色碼,而通常我們在為程式的介面配色時,多數都會參考網路上一些網站或版面配色,或是某些如Dribble這個由許多設計師聚集的平台,會把他們的設計作品與配色的色碼放上去
然後再使用這些顏色,而在C#中程式中,通常都會採用SolidBrush這個類別來協助指定配色,可是SoliBrush提供的指地方是10進制的RGB,那麼要如何轉換呢?
這邊來稍微紀錄一下,方便之後可以直接使用,也給需要做轉換的朋友直接參考
前言
常常在WEB上設定顏色會發現,使用的都是16進制的色碼,而通常我們在為程式的介面配色時,多數都會參考網路上一些網站或版面配色,或是某些如Dribble這個由許多設計師聚集的平台,會把他們的設計作品與配色的色碼放上去
然後再使用這些顏色,而在C#中程式中,通常都會採用SolidBrush這個類別來協助指定配色,可是SoliBrush提供的指地方是10進制的RGB,那麼要如何轉換呢?
這邊來稍微紀錄一下,方便之後可以直接使用,也給需要做轉換的朋友直接參考
轉換16進制色碼到SolidBrush中
通常我們會指定像是TextBlock或是Border等等這些元件的背景或是前景的顏色,而這些顏色都是透過SolidBrush物件來設定,不過在SolidBrush中需要透過Color結構來指定顏色
而通常設定Color不外乎是兩種方式:
1.透過Colors預先定義好的顏色設定,如下
border.Background = new SolidColorBrush(Colors.Azure);
2.使用Color提供的靜態方法FromArgb來填入Alpah與RGB各數值
border.Background = new SolidColorBrush(Color.FromArgb(100,255,0,0));
可是如果我們要使用或模仿一些網站的配色,通常會去直接記下網站的配色並設定,不過網站的配色是使用16進制 如:#FFFFFF表示白色等等
這時候我們便需做轉換。
在16進制轉成10進制的過程中,每兩個數值即各分別代表一個RGB中各一個通道,所以如#FF0000即是255,0,0
在C#中,我們需要透過ColorHelper去協助我們轉換個個通道的顏色,如下是程式碼
public static Brush HexColorToBrush(string color) {
color = color.Replace("#", "");
if (color.Length == 6)
{
return new SolidColorBrush(ColorHelper.FromArgb(255,
byte.Parse(color.Substring(0, 2), System.Globalization.NumberStyles.HexNumber),
byte.Parse(color.Substring(2, 2), System.Globalization.NumberStyles.HexNumber),
byte.Parse(color.Substring(4, 2), System.Globalization.NumberStyles.HexNumber)));
}
else
{
return null;
}
}
並透過這個方法傳入16進制的色碼字串即可。
參考資料
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)
另外要轉載請附上出處 感謝