渲染图像模糊的其他方式

时间:2014-08-15 15:59:07

标签: wpf vb.net itunes blur

我正在创建一个使用iOS设计美学的软件。它是一个全屏音乐应用程序,它使用当前轨道图稿作为整个窗口的模糊背景。

所以在我抓住并保存CurrentTrackArtwork之后。我用它作为我的图像控制的来源。

 <Image x:Name="PTrackCoverBlur" width="1450" height="1450" Opacity="0">
       <BlurEffect Radius="15" KernelType="Box" RenderingBias="Performance" RenderOptions.BitmapScalingMode="LowQuality" RenderOptions.EdgeMode="Aliased"/>
 </image>

然而,我需要一个高质量的模糊,在保存图像并将其重新显示为模糊图像时,不会使应用程序挂起。但是我不能将模糊半径设置为高于15,或者甚至使其成为高斯模糊,我甚至将RenderingBias设置为“Performance”,但我仍然有一个滞后。 (每当轨道改变时,我使用故事板将图像控件的不透明度设置为0,这就是滞后发生的地方)

<Storyboard x:Key="FadeOutBlurCover" Completed="FadeOutBlurCover_Completed">
        <DoubleAnimation Duration="0:0:0.30" Storyboard.TargetName="PTrackCoverBlur" Storyboard.TargetProperty="Opacity" To="0"/>
        <ColorAnimation Duration="0:0:0.30" Storyboard.TargetName="AppContentMask" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" To="#CCFFFFFF"/>
    </Storyboard>

然后我尝试再次获取当前曲目图稿并使用故事板将图像不透明度重置为1以重新显示背景

 <Storyboard x:Key="FadeInBlurCover" Completed="FadeInBlurCover_Completed">
            <DoubleAnimation Duration="0:0:0.20" Storyboard.TargetName="PTrackCoverBlur" Storyboard.TargetProperty="Opacity" To="1"/>
            <ColorAnimation Duration="0:0:0.20" Storyboard.TargetName="AppContentMask" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" To="#CCF9F9F9"/>
        </Storyboard>

我的问题是,这是导致应用程序滞后和挂起的原因。当我删除这个BlurEffect时,一切都很顺利,每个故事板都按预期工作。但Blur背景是我应用程序最重要的资产之一,我不想删除它,

无论如何我可以以编程方式加载模糊并保存它包括模糊,所以我不必使用BlurEffect但在我的应用程序中仍然有模糊。我更喜欢VB,但任何语言都可以。

我正在创建的这个应用程序是一个功能齐全的音乐播放器,通过COM连接到iTunes,当轨道发生变化时会发生很多事情,比如重新加载以前播放的曲目。获取新曲目的信息,显示最常播放歌曲的列表等等,这就是为什么如果有人能给我一个模拟图像的新方法的代码将是我的应用程序的完美解决方案。

1 个答案:

答案 0 :(得分:0)

自己模糊不是太糟糕。它不是最佳性能,但在添加不透明度和动画时会变得非常糟糕。当你考虑重绘和重新计算的次数时,你可以看出原因。

一种可能的解决方案是在您的对象中进行转换,然后在空闲时间内捕获并将其呈现为图像 - 使用this stack overflow中所述的RenderTargetBitmap。一旦它是一个图像,动画退出将更容易,因为你只是动画一个图像。