Silverlight - 刷带

时间:2012-10-13 09:42:38

标签: silverlight brush

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

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

how to make the brush smooth without lines in the middle

1 个答案:

答案 0 :(得分: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

以下是使用此技术的示例(左侧是简单舍入到最接近的整数的效果,右侧是带噪声的舍入):

Smooth gradient Noisy gradient

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

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