【发布时间】:2012-10-04 00:38:28
【问题描述】:
谁能告诉我如何增加 Silverlight 渐变画笔上“色带”的数量?
这个问题被标记为下面的回答,但它确实不是使用位图而不是渐变画笔的解决方案,因为我的用户可以动态修改他们的背景。这在使用全屏渐变时最为明显。
【问题讨论】:
标签: silverlight brush
谁能告诉我如何增加 Silverlight 渐变画笔上“色带”的数量?
这个问题被标记为下面的回答,但它确实不是使用位图而不是渐变画笔的解决方案,因为我的用户可以动态修改他们的背景。这在使用全屏渐变时最为明显。
【问题讨论】:
标签: silverlight brush
很遗憾,我只能给你一半的答案——关于为什么会发生这种情况以及如何避免这种情况的一般原则。至于在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 知识的人可以加入并在这种情况下提供最佳实施。
【讨论】: