Wie soll ich von Windows.UI.Color nach System.Numerics.Vector4 konvertieren?
Colors.White
sollte Vector4.One
sein, aber für die anderen Farben? Ich brauche das, weil die Win2D-Methode CanvasSpriteBatch.DrawFromSpritesheet
einen Vector4 (Farbton) als Farbparameter akzeptiert.
Ich denke, diese Funktion könnte sein wie:
private static Vector4 ColorToVector4(Color Color)
{
// a, r, g, b purely nominal
return new Vector4(a, r, g, b);
}
2 Antworten
Die für Sprite-Chargen verwendeten Vector4-Farbtöne sind 4 Floats, RGBA. Die Farbe in der Quellbitmap wird mit dem Farbtonwert multipliziert.
Vector4.One gibt Ihnen also die gleiche Farbe wie in der Quellbitmap. Vector4 (2,1,1,1) färbt es rot.
Dieser Code konvertiert eine Farbe in einen 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);
}
(Ich werde dafür sorgen, dass die Win2D-Dokumentation mit diesen Informationen aktualisiert wird.)
Sooo ... Wenn Vector4.One weiß sein sollte, dann sollte Vector4.Zero schwarz mit null Alpha sein. Windows.UI.Color scheint ARGB-Werte als Bytes zu enthalten, die jeweils einen numerischen Wert zwischen 0 und 255 haben. Konvertieren Sie das Byte einfach in seinen numerischen Wert und dividieren Sie es durch 255.
Etwas wie
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;
}
Neue Fragen
c#
C # (ausgesprochen "siehe scharf") ist eine statische Typisierungsprogrammiersprache mit mehreren Paradigmen, die von Microsoft entwickelt wurde. C # -Code zielt normalerweise auf die .NET-Tools und -Laufzeiten von Microsoft ab, zu denen unter anderem .NET Framework, .NET Core und Xamarin gehören. Verwenden Sie dieses Tag für Fragen zu Code, der in der formalen Spezifikation von C # oder C # geschrieben ist.