[C#] 如何指定16進制色碼到SolidBrush中

常常在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進制的色碼字串即可。

 

 

參考資料

Hex-to-RGB Conversion

C#中二进制、八进制、十六进制和十进制之间的相互转化问题

 


 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)

另外要轉載請附上出處 感謝