Xamarin.Forms.Color转换为十六进制值

21

我有一个 Xamarin.Forms.Color 对象,想将其转换为 '十六进制值'。

到目前为止,我还没有找到解决方法。

我的代码如下:

foreach (var cell in Grid.Children)
{
    var pixel = new Pixel
    {
        XAttribute = cell.X ,
        YAttribute = cell.Y ,
        // I want to convert the color to a hex value here
        Color = cell.BackgroundColor
    };
}
4个回答

59

快速修正一下,最后一行有误。

Alpha通道在其他值之前:

string hex = String.Format("#{0:X2}{1:X2}{2:X2}{3:X2}", alpha, red, green, blue);

这是扩展方法的最佳选择:

public static class ExtensionMethods
{
    public static string GetHexString(this Xamarin.Forms.Color color)
    {
        var red = (int)(color.R * 255);
        var green = (int)(color.G * 255);
        var blue = (int)(color.B * 255);
        var alpha = (int)(color.A * 255);
        var hex = $"#{alpha:X2}{red:X2}{green:X2}{blue:X2}";

        return hex;
    }
}

谢谢您的帖子,但这对我没有用,我正在测试 #14808c,输出的颜色完全不同。谢谢。 - Hussein Khalil
1
@HusseinKhalil 去掉 alpha,这样就可以解决了。 - Asad Ali

12
var color = Xamarin.Forms.Color.Orange;
int red = (int) (color.R * 255);
int green = (int) (color.G * 255);
int blue = (int) (color.B * 255);
int alpha = (int)(color.A * 255);
string hex = String.Format("#{0:X2}{1:X2}{2:X2}{3:X2}", red, green, blue, alpha);

Code Knox的答案是正确的语法。Alpha通道应该放在第一位 - https://developer.xamarin.com/api/type/Xamarin.Forms.Color/ - ethane
1
@HusseinKhalil 可能会起作用,因为您的颜色没有使用 alpha 通道,否则它不会是预期的颜色,因为十六进制的格式是 ARGB: #AARRGGBB,在给定的代码中为 #RRGGBBAA。 - Nk54

4

有点晚了,但以下是我在Xamarin Forms中如何做到这一点的方法(Xamarin.Forms.Color类已经公开了一个FromHex(string)方法。

public string ColorHexa { get; set; }
public Color Color
{
    get => Color.FromHex(ColorHexa);
    set => ColorHexa = value.ToHexString();
}

使用此扩展:

public static class ColorExtensions
{
    public static string ToHexString(this Color color, bool outputAlpha = true)
    {
        string DoubleToHex(double value)
        {
            return string.Format("{0:X2}", (int)(value * 255));
        }

        string hex = "#";
        if (outputAlpha) hex += DoubleToHex(color.A);
        return $"{hex}{DoubleToHex(color.R)}{DoubleToHex(color.G)}{DoubleToHex(color.B)}";
    }
}

(int)value * 255 != (int)(value * 255) - foxanna
这段代码需要进行更正。就像 @foxanna 提到的那样,术语(int)value * 255将给定的R/G/B双精度值四舍五入为整数0或1... 这导致十六进制字符串为#000000或#FFFFFF。 - thomasgalliker

3
这将提供以#{Alpha}{R}{G}{B}格式表示的十六进制颜色代码。
例如,红色为#FFFF0000
color.ToHex();

@SurajKumar 这回答了作者的问题,即“我想将其转换为'十六进制值'。” 我建议的代码行确实做到了这一点。 - Eli
可能是我的错误,但在所有情况下,您的答案都应该有描述,就像您在另一个答案中看到的那样。 - Suraj Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接