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