我应该如何从Windows.UI.Color转换为System.Numerics.Vector4?
Colors.White
应为Vector4.One
,但对于其他颜色?我需要这个,因为Win2D的方法CanvasSpriteBatch.DrawFromSpritesheet
接受Vector4(色调)作为颜色参数。
我认为这个功能可能就像:
private static Vector4 ColorToVector4(Color Color)
{
// a, r, g, b purely nominal
return new Vector4(a, r, g, b);
}
答案 0 :(得分:2)
用于精灵批次的Vector4色调是4个浮点数,RGBA。源位图中的颜色乘以色调值。
因此Vector4.One为您提供与源位图相同的颜色。 Vector4(2,1,1,1)将它染成红色。
此代码会将颜色转换为Vector4:
private static Vector4 ToVector4(Color color)
{
return new Vector4(
(float)Color.R / 255.0f,
(float)Color.G / 255.0f,
(float)Color.B / 255.0f,
(float)Color.A / 255.0f);
}
(我将安排使用此信息更新Win2D文档)
答案 1 :(得分:0)
Sooo ...如果Vector4.One应为白色,那么我猜Vector4.Zero应为黑色,零alpha。 Windows.UI.Color似乎将ARGB值保存为字节,每个值的数值介于0-255之间。所以只需将字节转换为数字值并除以255。
像
这样的东西private static Vector4 ColorToVector4(Color Color)
{
return new Vector4(
ColorToFloat(Color.A),
ColorToFloat(Color.R),
ColorToFloat(Color.G),
ColorToFloat(Color.B));
}
private static float ColorToFloat(byte col)
{
return BitConverter.ToInt16(new byte[1] { col }, 0) / 255f;
}