In meiner App möchte ich eine Vielzahl von Schattierungen einer benutzerdefinierten Farbe zeigen. Ich kann keine UWP-Methoden dafür finden. Ist es möglich? Ich programmiere in C#.Ich möchte verschiedene Schattierungen einer Farbe erhalten - kann dies in UWP getan werden?
Antwort
Dies ist kein Standard unterstützt in der UWP-Plattform, aber es ist einfach zu tun, nur mit Mathe;) Ich habe eine Helfer-Klasse, um genau das zu tun. Es gibt auch eine zusätzliche Klasse zum Definieren der HSV-Struktur. Der Trick besteht darin, den Farbton, die Sättigung und die Helligkeit (oder den Wert) der Farbe zu erhalten und dann die Helligkeit (den Wert) zu ändern.
Rufen Sie in der folgenden Klasse die Methode GetColors
auf, um eine Liste der Schattierungen für diese Farbe zu erhalten.
public class ColorHelper
{
public static List<Windows.UI.Color> GetColors(Windows.UI.Color baseColor, int max)
{
// fill color shades list
List<Windows.UI.Color> colorShades = new List<Windows.UI.Color>();
HSVColor hsv = ColorHelper.RGBtoHSV(baseColor);
hsv.V = 255; // alway use highest brightness to determine collection of shades
double v = hsv.V / max;
for (int i = 0; i < max; i++)
{
hsv.V = v * i;
if (hsv.V > 255) hsv.V = 255;
colorShades.Add(ColorHelper.HSVtoRGB(hsv));
}
return colorShades;
}
public static HSVColor RGBtoHSV(Windows.UI.Color rgb)
{
double max, min, chroma;
HSVColor hsv = new HSVColor();
min = Math.Min(Math.Min(rgb.R, rgb.G), rgb.B);
max = Math.Max(Math.Max(rgb.R, rgb.G), rgb.B);
chroma = max - min;
if (chroma != 0)
{
if (rgb.R == max)
{
hsv.H = (rgb.G - rgb.B) / chroma;
if (hsv.H < 0.0) hsv.H += 6.0;
}
else if (rgb.G == max)
{
hsv.H = ((rgb.B - rgb.R) / chroma) + 2.0;
}
else
{
hsv.H = ((rgb.R - rgb.G) / chroma) + 4.0;
}
hsv.H *= 60.0;
hsv.S = chroma / max;
}
hsv.V = max;
hsv.A = rgb.A;
return hsv;
}
public static Windows.UI.Color HSVtoRGB(HSVColor hsv)
{
double min, chroma, hdash, x;
Windows.UI.Color rgb = new Windows.UI.Color();
chroma = hsv.S * hsv.V;
hdash = hsv.H / 60.0;
x = chroma * (1.0 - Math.Abs((hdash % 2.0) - 1.0));
if (hdash < 1.0)
{
rgb.R = (byte)chroma;
rgb.G = (byte)x;
}
else if (hdash < 2.0)
{
rgb.R = (byte)x;
rgb.G = (byte)chroma;
}
else if (hdash < 3.0)
{
rgb.G = (byte)chroma;
rgb.B = (byte)x;
}
else if (hdash < 4.0)
{
rgb.G = (byte)x;
rgb.B = (byte)chroma;
}
else if (hdash < 5.0)
{
rgb.R = (byte)x;
rgb.B = (byte)chroma;
}
else if (hdash < 6.0)
{
rgb.R = (byte)chroma;
rgb.B = (byte)x;
}
min = hsv.V - chroma;
rgb.R += (byte)min;
rgb.G += (byte)min;
rgb.B += (byte)min;
rgb.A = (byte)hsv.A;
return rgb;
}
}
public class HSVColor
{
public double H { get; set; }
public double S { get; set; }
public double V { get; set; }
public double A { get; set; }
public HSVColor()
{
H = S = V = A = 1.0;
}
}
Sie können einen LinearGradientBrush oder einen RadialGradientBrush verwenden. Sie sollten nur zwei GradientStops hinzufügen, um einen Bereich anzuzeigen. Legen Sie den Hintergrund eines Elements fest, das mit dem Farbverlaufsbürsten gemalt werden soll.
<Page
x:Class="CarServiceLogger.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:CarServiceLogger"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<!--{ThemeResource ApplicationPageBackgroundThemeBrush}-->
<Grid >
<Grid.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Offset="0" Color="#FF0000" />
<GradientStop Offset="1" Color="#000000" />
</LinearGradientBrush>
</Grid.Background>
</Grid>
</Page>
Es ist eine knifflige Frage über Schattierungen. Der Farbton sollte mindestens von einer Farbe zur anderen sein. Der einfachste Farbton ist von ausgewählter Farbe zu schwarz. Sie können es als wechselnden Alpha-Kanal (Transparenz) von 255
zu 0
mit schwarzer Farbe unten (Hintergrund) implementieren. Siehe Blautöne: https://en.wikipedia.org/wiki/Tints_and_shades#/media/File:Kleurenovergang_van_zwart_naar_blauw.png
- 1. asp.net Endlosschleife - kann dies getan werden?
- 2. Kann dies durch Häuten getan werden?
- 3. Kann dies mit SQLAhclemy/Python getan werden?
- 4. Kann dies mit LDAP-Funktionen getan werden?
- 5. Ich möchte die Windows-C++ - Funktion WinHttpGetProxyForUrl von Python aufrufen - kann dies getan werden?
- 6. Konvertieren verschiedener Schattierungen einer Farbe in einem Bild in eine Farbe
- 7. Wie kann ich mehrere Schattierungen von einer bestimmten Grundfarbe erzeugen?
- 8. C++ - Pass durch Referenz - kann dies getan werden?
- 9. Wie würde dies in ASP.NET MVC getan werden?
- 10. Python: Kann dies in einer einzigen Liste Verständnis Anweisung getan werden
- 11. CommandBar Farbe in UWP
- 12. LinqToSql und Volltextsuche - kann es getan werden?
- 13. 2 verschiedene Farbe Text in einer Zelle
- 14. Was kann/kann nicht in einem generischen Repository getan werden
- 15. In Polymer.js Kinder einer Vorlage haben einen Verweis auf die Vorlage, wie kann dies in Polymer.dart getan werden
- 16. Kohana 3.2 - Ich möchte verschiedene Termine
- 17. C++ programmgesteuert: Kann es getan werden?
- 18. Tricky CSS bedingte Geschwister> Kind-Selektor> Kann dies getan werden?
- 19. Wo kann ich viele verschiedene Farben für ein Diagramm erhalten?
- 20. Kann dies ohne Tabellen oder JavaScript getan werden: 100% height will verbleibende Höhe des Containers
- 21. Wo sollten Dinge in einer ASP.NET-Seite getan werden?
- 22. Sequenzierte Videowiedergabe (Cutlisten) in Java .. kann es getan werden?
- 23. Wie kann dies in MySQL optimiert werden?
- 24. Wie kann dies in LINQ erreicht werden?
- 25. Wie kann dies in einer einzigen Zeile geschrieben werden?
- 26. Ich möchte Werte in Liste erhalten EF
- 27. Kann ich eine Vaadin-Benachrichtigung erhalten, wo immer ich möchte?
- 28. Kann ich dies in einer Mysql-Abfrage tun?
- 29. Ich möchte die Farbe von Punkten zu blau ändern, wie es gemacht werden kann?
- 30. Kann dies in einem Regex durchgeführt werden?