wpf 如何从资源获取BitmapImage?

ctehm74n  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(195)

我的程序集包含BuildAction==Resource的图像。我希望从此嵌入资源获取BitmapImage。
我可以像这样从文件加载BitmapImage:

var bitmap = new BitmapImage(new Uri(path));

但是如何创建一个引用嵌入资源图像的URI呢?
当我尝试创建一个'pack URI'(例如pack://application:,,,/MyImage.pngpack://application:,,,/MyAssembly;component/MyImage.png)时,抛出了一个异常:
“无效的URI:因为有冒号(':'),所以应该是连接埠,但无法剖析连接埠。"**
我找到了此blog post中UriFormatException的修复程序
但是,应用了该修复后,在尝试从包URI加载BitmapImage时仍然会出现异常。
当使用pack://application:,,,/Image.png时,我会得到一个NullReferenceException,而当使用pack://application:,,,/AssemblyName;component/Image.png时,我会得到一个NotSupportedException“无法识别URI前缀”。

摘要我的问题是,在任何WPF控件/window/etc被示例化之前,我试图在进程中使用“pack URI”,所以“pack”URI方案还没有注册(其他WPF所需的“stuff”也不能设置,因为手动注册pack方案本身不能解决问题)。解决方案是等到示例化我的WPF用户控件之后再使用pack URI。

dw1jzc5e

dw1jzc5e1#

This MSDN page包含了您可能想了解的有关WPF中资源URI(通常称为包URI)的所有信息。您可能会更经常地使用 * 相对URI *,因此请参见表4,它应该有特殊用途。
如果您想了解资源(包)URI的简要概述,请参阅this blog post。它显示语法确实相对简单:

pack://application:,,,/ResourceFile.xaml

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

然而,有一些怪癖需要解决(以我的经验),所以经常需要一些实验来找到正确的资源URI。

相关问题