1

有人能告诉我如何增加 Silverlight 渐变画笔上“色带”的数量吗?

这个问题被标记为下面的回答,但它确实不是使用位图而不是渐变画笔的解决方案,因为我的用户可以动态修改他们的背景。这在使用全屏渐变时最为明显。

如何让画笔平滑中间没有线条

4

1 回答 1

0

不幸的是,我只能给你一半的答案——关于为什么会发生这种情况以及如何避免它的一般原则。至于SL中的实现,我只能给你一些一般的想法,因为我不是那里的专家。

这些条带是由显示器的有限颜色深度造成的。为了减少效果,必须使渐变稍微嘈杂。最简单的方法是将渐变中的颜色计算为浮点数,然后以加权随机方式将其四舍五入为整数 - 如下所示:

correct_value = linear_gradient(x,y)     // e.g 25.3
whole_part = round_down(correct_value)   // 25
frac_part = correct_value - whole_part   // 0.3
color_used = whole_part
if (true_with_probability(frac_part)):
  color_used = color_used + 1            // color_used == 25 with 70% chance
                                         //               26 with 30% chance

这是一个使用这种技术的例子(左边是简单地四舍五入到最接近的整数的效果,右边是带噪声的四舍五入):

平滑渐变 嘈杂的渐变

至于如何在您的情况下实现它 - 我假设有一些方法可以创建一个自定义Brush对象,允许您进行每个像素的计算,或者某种可以提供帮助的着色器功能。如果这些都不可能,您也可以使用此逻辑简单地生成位图,并将该位图用作画笔(​​我相信这将是ImageBrush,但这只是来自谷歌搜索)。

在这种情况下,也许有更多 Silverlight 知识的人可以加入并提供最佳实现。

于 2012-10-13T11:10:21.230 回答