确保文本在Silverlight中始终可读

时间:2009-03-30 12:51:15

标签: silverlight graphics

我们有一个Silverlight应用程序,可以通过视频显示文本。文本和视频都可以被视为变量。有时我们可能有一个黑暗的视频,有时是一个明亮的视频,有时一个视频有两个部分。

想想电影结束时的点数。我们希望确保最终用户始终可以阅读视频上显示的文字。文字始终是视频顶部的叠加层。

简单的解决方案是两个显示文本两次显示为白色,一次显示为黑色,偏移量较小。这几乎可以工作,但实际上看起来有点粗糙,并且会影响用户体验。

理想情况下,我们会在边缘周围留下轻微的半透明光晕。因此,如果文本是白色的,那么边缘就会出现黑光。

有办法做到这一点吗?或者是否有相同或更好的解决方法?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用对比轮廓显示它,而不仅仅是一个“投影”,如果您使用一个小偏移显示一次就会得到。要执行此操作,请使用一种颜色显示四次,然后使用对比色显示第五次,以四个先前副本为中心。前四个应该偏离中心的一个像素,向右,向下和向左偏移。

净效应应该是一个大纲。当然,也许这看起来也很“粗糙”,因为它是计算机生成的,因此在字距,字符之间的间距等问题上并不完美。但至少可以很快尝试。

通常,当背景是视频时自动找到对比鲜明的颜色听起来有点困难。在最坏的情况下,视频包含的文本就像您要显示的文本一样。在这种情况下,正确的解决方案很难想象。

答案 1 :(得分:1)

类似于确保字幕在电影/电视中始终可读的问题。最强大但不一定最优雅的解决方案是为文本设置彩色背景矩形,该矩形是不透明的或具有低透明度值 - 通常为灰色或黑色,具有良好的对比前景色。

答案 2 :(得分:1)

我使用Silverlight 3中的DropShadow像素着色器效果完成了这项工作。它运行良好,但由于像素着色器未在硬件上执行,因此它会对应用程序的性能产生相当大的影响。 / p>

如果您想要雄心勃勃,可以编写自己的像素着色器。 Silverlight 3支持HLSL着色器。