0

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

2 回答 2

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 文档)

于 2015-12-28T17:40:47.113 回答
0

太好了...如果 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;
}
于 2015-12-27T21:57:36.363 回答