如何从资源中获取BitmapImage?

mac*_*nir 34 wpf resources bitmapimage pack-uri

我的程序集包含一个BuildAction == Resource的图像.我想从这个嵌入式资源中获取BitmapImage.

我可以从这样的文件加载BitmapImage:

var bitmap = new BitmapImage(new Uri(path));
Run Code Online (Sandbox Code Playgroud)

但是如何创建一个将引用嵌入式资源图像的Uri呢?

当我尝试创建' pack URI '(例如pack://application:,,,/MyImage.pngpack://application:,,,/MyAssembly;component/MyImage.png)时,会抛出异常:

System.UriFormatException"无效的URI:由于存在冒号(':')而无法解析端口,因此需要端口."

我在这篇博客文章中找到了修复UriFormatException

但是,应用该修复程序后,我仍然会尝试从包URI加载BitmapImage.

使用pack://application:,,,/Image.png格式时,我得到一个NullReferenceException,当使用该pack://application:,,,/AssemblyName;component/Image.png格式时,我得到一个NotSupportedException"无法识别Uri前缀".


总结 我的问题是我在实例化任何WPF控件/窗口/等之前尝试在进程中使用'pack URI',因此'pack'URI方案尚未注册(其他WPF必需'stuff'也必须不要设置,因为手动注册包方案本身不能解决问题).解决方案是等到实例化我的WPF用户控件后才使用包URI.

Nol*_*rin 20

此MSDN页面包含您可能想要了解的有关WPF中资源URI的所有信息(通常称为包URI).您可能希望更频繁地使用相对URI,因此请参阅表4,这应该是特别有用的.

如果您想要简要概述资源(包)URI,请参阅此博客文章.它表明语法确实相对简单:

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

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
Run Code Online (Sandbox Code Playgroud)

但是,有一些问题需要解决(根据我的经验),所以经常找到正确的资源URI需要一些实验.

  • @mackenir:你有没有想过,你在 *edited* 问题中发布的 URL 在我写我的回复时还没有出现。粗鲁不会给你一个好的答案。 (3认同)