【问题标题】:Other way of rendering Image Blur其他渲染图像模糊的方法
【发布时间】:2014-08-16 02:27:10
【问题描述】:

我正在创建一个使用 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 设置为“性能”,但我仍然有延迟。 (每次轨道改变时,我使用情节提要将图像控件的不透明度设置为 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 时,一切都很顺利,每个故事板都按预期工作。但是模糊背景是我的应用程序中最重要的资产之一,我不想删除它,

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

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

【问题讨论】:

    标签: wpf vb.net itunes blur


    【解决方案1】:

    模糊本身​​并不算太糟糕。这不是最好的性能,但是当您添加不透明度和动画时会变得非常糟糕。当您考虑重绘和重新计算的次数时,您就会明白为什么。

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

    【讨论】:

    • 你能给我发一份这个的示例代码吗?我很难弄清楚这个 RenderTargetBitmap 是如何工作的。
    • 我真正需要的是当歌曲改变时,我需要淡出图像并重新获取当前曲目的插图重新应用模糊重新保存图像,但这次带有模糊效果然后使用新保存的图像作为背景图像并将其淡入
    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 2017-09-26
    • 2014-07-28
    • 1970-01-01
    • 2015-03-11
    • 2013-01-28
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多