从Windows.UI.Color转换为System.Numerics.Vector4的正确而快速的方法

时间:2015-12-27 19:59:24

标签: c# win2d

我应该如何从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);
    }

2 个答案:

答案 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;
}