在我的应用中,我想展示用户定义颜色的各种色调。我找不到UWP方法来做到这一点。可能吗?我用C#编程。
答案 0 :(得分:0)
您可以使用LinearGradientBrush或RadialGradientBrush。您只需添加两个GradientStop来显示范围。使用渐变画笔设置要绘制的某个元素的背景。
<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>
答案 1 :(得分:0)
这是一个关于阴影的棘手问题。阴影应该至少从一种颜色到另一种颜色。最简单的色调是从选定的颜色到黑色。您可以将其实现为将{alpha}频道(透明度)从255
更改为0
,并在下方显示黑色(背景)。请参阅蓝色阴影:https://en.wikipedia.org/wiki/Tints_and_shades#/media/File:Kleurenovergang_van_zwart_naar_blauw.png
答案 2 :(得分:0)
这不是UWP平台支持的标准,但是使用数学很容易;)我已经创建了一个辅助类来实现这一点。还有一个用于定义HSV结构的额外类。 诀窍是获得颜色的色调,饱和度和亮度(或值),然后修改亮度(值)。
在下面的课程中,调用GetColors
方法获取该颜色的阴影列表。
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;
}
}