在Silverlight中显示带有圆角的视频的最佳方法是什么?

时间:2020-03-05 18:44:09  来源:igfitidea点击:

MediaElement不支持圆角(半径,半径)。我应该在圆角矩形上使用VideoBrush吗?

解决方案

回答

是的,从某种意义上来说,我们既要问又要回答问题……但这是我能想到的两个选择之一。可能存在问题的原因是,我们失去了从MediaElement控件获得的某些功能/控件。另一个选择是执行此操作:

  • 将MediaElement添加到页面。
  • 在其顶部绘制一个矩形并设置所需的拐角半径
  • 右键单击Blend中的矩形,然后选择"创建剪切路径"
  • 将剪切路径应用于MediaElement

这样,我们仍在使用MediaElement控件,但是我们可以"剪切"任何想要获得所需舍入效果的内容。

本示例显示了裁剪的MediaElement。我知道描绘矢量路径并不容易,但是如果在Blend中打开它,则会看到一个圆形的MediaElement。

<MediaElement 
        Height="132" Width="176" Source="Egypt2007.wmv" 
        Clip="M0.5,24.5 C0.5,11.245166 11.245166,0.5 24.5,0.5 L151.5,0.5
              C164.75484,0.5 175.5,11.245166 175.5,24.5 L175.5,107.5 C175.5,
              120.75484 164.75484,131.5 151.5,131.5 L24.5,131.5 C11.245166,
              131.5 0.5,120.75484 0.5,107.5 z"/>

回答

使用圆角矩形和VideoBrush不会失去对使用显示的MediaElement的任何功能/控制,因为该元素无论如何都必须位于Xaml中,因此可以使用通常的Play / Pause / Stop方法对其进行控制,除了播放发生在矩形中。使用剪辑区域有点麻烦,因为很难调整该区域的大小。矩形更好,因为我们具有灵活的布局。

<MediaElement x:Name="myElement" Source="clip.wmv" Visibility="Collapsed"/>
<Rectangle RadiusX="10" RadiusY="10" Width="640" Height="480">
    <Rectangle.Fill>
        <VideoBrush Source="myElement" Stretch="Uniform"/>
    </Rectangle.Fill>
<Rectangle/>

回答

具有"硬"边缘的剪切路径也可以使用OpacityMask(尽管我认为这需要更多的处理能力)。