使用 DX Compositor 的 UWP 应用程序实时模糊背景

2024-03-02

因此,UWP 合成支持已经有一段时间了,我正在寻找一种对元素进行实时模糊的方法(在移动或加载时进行实时模糊,而不是静态快照)。到目前为止,我一直在 stackoverflow 和 google 上查看一些答案,这导致我使用Lumia 成像 SDK 示例 http://igrali.com/2015/09/26/using-swapchainpanelrenderer-to-improve-real-time-rendering-in-lumia-imaging-sdk-3/和Win2D。它们都不足以支持实时模糊。我知道在合成中可以进行实时模糊,因为我看过模糊视频的演示,并且有一个过时的项目XAMLFx https://jeremiahmorrill.wordpress.com/2013/11/22/pixel-shaders-for-xaml-windows-runtime/允许您在 8.1 应用程序上使用 DX 模糊几乎所有内容。

我不想用RenderTargetBitmap(想让我的 UI 线程保持空闲)。我怎样才能只使用组合 API 来做到这一点:

ContainerVisual rootVisual = GetVisual(this.Content);
Compositor compositor = rootVisual.Compositor;

// what next?

任何帮助是极大的赞赏 :)


注意:这些功能(模糊和背景画笔)需要 Windows 10 周年纪念更新。您目前可以通过 Windows Insider 计划预览 SDK

先决条件

  1. 针对Windows 10周年更新
  2. 对视觉层以及视觉树的工作原理有基本的了解。您可以了解更多here https://msdn.microsoft.com/en-us/windows/uwp/graphics/visual-layer.

另外你可以看看我写的要点here https://gist.github.com/robmikh/a05c07c53ab0d227b07da4a13d53b0e9,这是在 XAML 应用程序中使用 Composition API 快速启动和运行的方法。它还演示了使用效果。不仅如此,它还涵盖了使用 Composition API(使用我编写的包)加载图像。

入门

您可以通过两种方式在合成 API 中使用模糊效果。一种是适用于单个表面的正常效果。另一种是将其用作“背景”画笔,将所有内容置于其后面并对其进行模糊处理。

要使用模糊效果,您需要使用 Win2D 中的 GaussianBlurEffect 定义。事情是这样的:

GaussianBlurEffect blurEffect = new GaussianBlurEffect() 
{
    Name = "Blur",
    BlurAmount = 0.0f, // You can place your blur amount here.
    BorderMode = EffectBorderMode.Hard,
    Optimization = EffectOptimization.Balanced,
    Source = new CompositionEffectSourceParameter("source")
};

下一步是创建效果工厂:

var effectFactory = compositor.CreateEffectFactory(blurEffect, new[] {"Blur.BlurAmount"});

第二个参数不是必需的,但提供它可以让您在编译效果后设置动画或更改命名属性。在这种情况下,我们现在可以更改 BlurAmount 或对其进行动画处理。如果您想重复使用模糊效果工厂来创建多个模糊效果画笔,但让它们都使用不同的 BlurAmount,则这非常有用。

下一步取决于您希望效果如何发挥作用。

单面

如果您希望它仅应用于单个表面,您将执行以下操作:

var effectBrush = effectFactory.CreateBrush();
effectBrush.SetSourceParameter("source", someOtherSurfaceBrush);
visual.Brush = effectBrush;

Backdrop

但是,如果您想动态模糊给定视觉效果背后的大量内容,您可以执行以下操作:

var effectBrush = effectFactory.CreateBrush();
effectBrush.SetSourceParameter("source", compositor.CreateBackdropBrush());
visual.Brush = effectBrush;

请注意,这看起来与第一种方法非常相似,但不是给它一个表面画笔,而是给它一个 BackdropBrush。这将实时获取视觉背后的内容并将其输入效果源中。在这种情况下,视觉“后面”的任何东西都会变得模糊。

表现

如果您只对单个图像进行模糊处理,那么最好对单个表面进行模糊处理。您应该尝试仅在真正需要时才使用 BackdropBrush。

告诉我更多!

要了解更多信息,请前往我们的GitHub 页面 https://github.com/Microsoft/WindowsUIDevLabs!我们创建了一个自定义 XAML 控件,应该可以帮助您here https://github.com/Microsoft/WindowsUIDevLabs/blob/master/SamplesCommon/SamplesCommon/BackDrop.cs,你可以看到它的实际效果here https://github.com/Microsoft/WindowsUIDevLabs/tree/master/SampleGallery/Samples/SDK%20Insider/BackDropSample。您还可以查看 //build 谈话here https://channel9.msdn.com/Events/Build/2016/B818.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 DX Compositor 的 UWP 应用程序实时模糊背景 的相关文章

随机推荐

  • Android 无法通过互联网从 PC 服务器接收 UDP 数据

    我目前正在探索用Java 进行UDP 数据包传输 以在Android 上创建多人游戏 我使用通常的 127 0 0 1 成功地在 Nexus 4 内交换数据包 并且还成功地在本地网络中的 PC 服务器和 Android 客户端之间交换数据包
  • 使用 Maven 创建 META-INF/services 文件

    有没有办法使用 Maven 在 META INF services 中创建自定义服务文件 使用 Ant 可以这样做 https ant apache org manual Tasks jar html https ant apache or
  • 在实时数据库上运行 mysqldump

    只是想知道在实时数据库上运行 mysqldump 有哪些风险 是否存在数据库损坏的可能性 mysqldump 似乎锁定了整个数据库 您的数据库表使用什么引擎 如果您使用事务表 您可以使用选项 单事务 转储 这将以一致的状态转储您的表 如果您
  • Python:Scrapy CSV 导出不正确?

    我只是想写入 csv 但是 我有两个单独的 for 语句 因此每个 for 语句的数据独立导出并破坏顺序 建议 def parse self response hxs HtmlXPathSelector response titles hx
  • 在 docker 容器中安装 imagemagick

    我正在尝试在 Ubuntu 14 04 服务器上使用 ImageMagick 在上传到 s3 之前调整图像大小 我正在 Wercker 创建的 docker 容器内运行所有内容 问题是我已经将它安装在服务器上 并将其安装在 docker 容
  • NoSuchBeanDefinitionException:未找到与 spring 测试和 Junit 相关的合格 bean 类型

    我正在使用 spring 测试和 Junit 编写测试用例 并在初始化 bean 时遇到错误 我发现了很多关于此的帖子 但对我来说没有任何作用 下面是我的代码 Pom xml
  • 如何使用 css 模块调整网站上的水豚查找器?

    在我们的自动化测试中 代码中的典型行可能类似于 find edit icon click 我们正在我们的项目中使用 css modules 我被警告说类名可能会发生巨大的变化 一个非常滑稽的例子是这个网站在其类名称中使用表情符号 当您检查页
  • POST json 到 Rails 服务器

    def create req ActiveSupport JSON decode request body if user User authenticate req email req password session user id u
  • 使用“抛出”脚本来阻止 Safari 加载脚本 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 您好 我需要阻止 Safari 桌面加载脚本 Throw 可能是一个选项 但不确定如何针对特定浏览器 这会正确定位浏览器吗 if ch
  • android中遍历复杂的xml文件

    我有一个 xml 文件位于此链接上 http nchc dl sourceforge net project Trialxml options xml http nchc dl sourceforge net project trialxm
  • 如何从 Visual Studio 调试器执行所有进程内存的高级搜索?

    我是一个大型商业程序的开发人员 我正在尝试追踪特定的 C 内存泄漏 我想使用 Visual Studio 搜索进程的整个有效地址空间 但我不知道如何有效地执行此搜索 我知道 s 命令文档here http msdn microsoft co
  • 多个派生类的dynamic_cast

    我有一个基类和n派生类 我想实例化一个派生类并将其发送到一个接收基类作为参数的函数 在函数内部 我通过使用dynamic cast找到了它是哪种类型的派生类 但我不想使用几个if else语句 相反 我想知道是否有一种方法可以找出它是哪个派
  • URL 重写未安装在 Windows 10 IIS 10 上

    我的 IIS 上需要 Url Rewrite 模块 但它没有安装 并表示我至少需要 IIS7 较新版本开箱即用支持win10 https www iis net downloads microsoft url rewrite https w
  • 通过 iPython 和伪控制台运行文档测试

    我有一个相当基本的可文档文件 class Foo gt gt gt 3 2 5 if name in main console import doctest doctest testmod verbose True 当直接通过 python
  • Datagridview 更改非空单元格的单元格颜色

    我正在创建一个日历约会应用程序 我想在加载 打开应用程序时更改非空单元格 具有值的单元格 的 datagridview 的颜色 我的应用程序已经处理如何加载数据 我可以更改非空单元格的颜色 但关闭并再次打开后 颜色又恢复为默认值 我不确定语
  • X-Editable 在成功更新后将“空”

    我正在使用 X Editable 插件在表格上进行内联编辑 但遇到了一个恼人的问题 请求成功并更新成功后 插件会在表格单元格上放置 空 而不是正确的更新值 我的网站很安静 所以我正在对 URL 执行 PUT 请求 例如http exampl
  • 如何在 Eclipse Kepler 中添加 Web Tools Platform(WTP)

    我安装了Eclipse Kepler在我的系统中 到目前为止我开发了J2SE应用 现在我想发展J2EE应用程序 所以我需要添加WTP在我的日食中 我尝试添加WTP在已经存在的 eclipse 中 为此 我通过以下方式打开安装对话框并提及Na
  • 如何在 Eclipse 中注释块?

    Eclipse 有评论块的热键吗 并取消注释块 Ctrl to toggle comments and Ctrl Shift to toggle comments At least for Java anyway other tooling
  • 为什么set_xticks不设置刻度的标签?

    import matplotlib pyplot as plt x range 1 7 y 220 300 300 290 320 315 def test axes axes bar x y axes set xticks x i 100
  • 使用 DX Compositor 的 UWP 应用程序实时模糊背景

    因此 UWP 合成支持已经有一段时间了 我正在寻找一种对元素进行实时模糊的方法 在移动或加载时进行实时模糊 而不是静态快照 到目前为止 我一直在 stackoverflow 和 google 上查看一些答案 这导致我使用Lumia 成像 S