Xamarin.Forms.Colorがあり、それを「16進値」に変換したい。
これまでのところ、私は私の問題の解決策を見つけていません。
私のコードは次のとおりです。
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
};
}
簡単な修正ですが、最後の行は間違っています。
アルファチャネルは他の値の前にあります。
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;
}
}
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);
少し遅れましたが、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)}";
}
}