.NET中顏色的轉換方法總結


1,AGRB字符串"#FF00AFDB"轉Color

法一:System.Drawing.ColorTranslator類

Color color = ColorTranslator.FromHtml("#FF00AFDB");
ColorTranslator還可以將Color轉成Html的顏色代碼,但是Alpha值將會丟失,如"#FF00AFDB"將會變成"#00AFDB"

法二:System.Drawing.ColorConverter類

ColorConverter colorConverter = new ColorConverter();
Color color = (Color)colorConverter.ConvertFromString("#FF00AFDB");
備注:對於WPF,對應的是System.Windows.Media.ColorConverter,ConvertFromString也變成了靜態方法
Color color = (Color)ColorConverter.ConvertFromString("#FF00AFDB");

法三:將"#FF00AFDB"轉換成int型的ARGB數字,再利用構造函數構建

public static Color ToColor(this string colorName) {    if (colorName.StartsWith("#"))
        colorName = colorName.Replace("#", string.Empty);
    int v = int.Parse(colorName, System.Globalization.NumberStyles.HexNumber);
    return new Color() {
        A = Convert.ToByte((v >> 24) & 255),
        R = Convert.ToByte((v >> 16) & 255),
        G = Convert.ToByte((v >> 8) & 255),
        B = Convert.ToByte((v >> 0) & 255)
    };
}
做成了擴展方法,之后這樣使用
Rectangle rectangle = new Rectangle();
rectangle.Fill = new SolidColorBrush("#FFF5F5F5".ToColor());

2,已知顏色的名字創建Color,如red,green等

Color color = Color.FromName("red");

3,不知道顏色的名字,可以用系統定義的顏色,如下面幾種方式


Color color = Color.FromKnownColor(KnownColor.ActiveBorder);
Color color = Color.Red;
Color color = SystemColors.ButtonFace;

4,Color轉Int32


看到這里你可能要問了,Color轉int有啥用啊?其實如果你在用一些現有的圖像庫的時候,它們經常將Color表現為一個int值。
在這種情況下,ARGB值是通過其AARRGGBB的byte的順序用32位int表現的。這里我們可以做如下轉換:
public static int ToArgb(this Color color) {
    int argb = color.A << 24;
    argb += color.R << 16;
    argb += color.G << 8;
    argb += color.B;
    return argb;
}
以下是這兩個方法的一個綜合應用:
Rectangle rectangle = new Rectangle();
SolidColorBrush scb = new SolidColorBrush();
scb.Color = "#FFF5F5F5".ToColor();
rectangle.Fill = scb;
MessageBox.Show(scb.Color.ToArgb().ToString());


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM