我在WPF中使用Gradients时发现了丑陋的条带问题,并且发现解决方案是将“每像素位数”属性设置为32。 问题是该属性似乎只是Windows Phone,即不能用于桌面设备的程序,因为尝试在ApplicationManifest中添加this string似乎没有做任何事情。
有谁知道我是否可以设置此属性?
谢谢。
我绘制渐变的函数:
public LinearGradientBrush getGradient(Color c1, Color c2, double opacity)
{
LinearGradientBrush gradient = new LinearGradientBrush();
gradient.StartPoint = new Point(0, 0);
gradient.EndPoint = new Point(1, 1);
gradient.GradientStops.Add(new GradientStop(c1, 0.0));
gradient.GradientStops.Add(new GradientStop(c2, 1.0));
gradient.Opacity = opacity;
return gradient;
}
我从AlbumCover中的两种最主要的颜色中绘制渐变。您可以在窗口的左上角看到两种颜色。然后我用这个调用getGradient函数:
getGradient(Colors[0], Colors[1], 0.5); // 0.5 is dynamic depending on the brightness of those colors. Tried with 1 opacity but it's still the same.
以下是示例图像(在PNG中,未经压缩上传)
正如你所看到的那样,正在进行绑定。有更糟糕的例子,但我不记得Cover给了它。
请注意,Image1的AlbumCover上没有条带。即使它有一个渐变。
答案 0 :(得分:2)
通过快速搜索,我发现了一些建议,即问题可能只是一种视觉效果,这是因为每个R,G和B通道只有256个值,它们定义了颜色和渐变的工作方式。如果您尝试用渐变覆盖大面积区域,则会将其划分为填充纯色的较小区域,在相邻区域之间稍微变化。此外,还有一种称为Mach bands的视错觉,使得这些区域的边界更加明显。
请查看这些链接以获取更多信息和一些建议的解决方案:
答案 1 :(得分:1)
经过长时间挖掘后,我终于找到了最佳解决方案:
为图像添加一点噪点!这意味着我必须自己绘制渐变,但我相信质量会更好。
当我写完文章时,我会用算法本身和示例更新这篇文章。
我猜也好。