gpt4 book ai didi

wpf - 将 URI 打包到嵌入 resx 文件中的图像

转载 作者:行者123 更新时间:2023-12-03 20:09:56 25 4
gpt4 key购买 nike

如何为资源文件中的图像构建包 URI?

我有一个名为 MyAssembly.Resources.dll 的程序集,它有一个名为Images的文件夹,然后有一个名为Assets.resx的资源文件。此资源文件包含我的图像(称为 MyImage.png)。我的代码行是:

uri = new Uri("pack://application:,,,/MyAssembly.Resources,Culture=neutral,PublicKeyToken=null;component/Images/Assets/MyImage.png");

但是,当我尝试将此 URI 提供给新的 BitmapImage 的构造函数时我得到一个 IOException与消息

Cannot locate resource 'images/assets/myimage.png'.



请注意,我在同一个程序集中还有其他松散图像,我可以使用包 URI 很好地检索它们,这些图像的构建操作设置为 Resource 但它们没有嵌入到 resx 文件中 .我应该在路径中包含 resx 文件的名称吗?

(我希望在 resx 文件中嵌入图像,以便我可以利用 UI 文化设置来检索正确的图像(图像包含文本))。

最佳答案

有两种方法可以将资源“嵌入”到程序集中。 Windows 窗体使用 Embedded Resource建立行动。
WPF 期望程序集中包含的资源用 Resource 标记。建立行动。

在 Visual Studio 中使用 Resx 编辑器添加图像时,它会将其标记为嵌入式资源。此外,它将其存储为类型 System.Drawing.Bitmap . WPF 期望 System.Windows.Media.ImageSource类型。

如果您有一个反汇编程序(如 ILSpy),您可以查看对文件设置不同构建操作的影响。

示例 ImagesLib 项目

这是一个包含两个图像的项目的屏幕截图。从名称中很明显,cat_embedded.jpg正在使用 Embedded Resource构建 Action 和cat_resource.jpg正在使用 Resource建立行动。

enter image description here

这就是它们在 ILSpy 中的样子。

enter image description here

看看 cat_resource.jpg 文件是如何在 ImageLib.g.resources 部分中的?那是 WPF 寻找资源的地方。文件的路径是资源名称的一部分 (images/cat_resource.jpg)。因此,当您使用如下路径时:

var uri = new Uri("pack://application:,,,/ImageLib;component/Images/cat_resource.jpg");

您在单词 ;component 之后指定匹配路径.

另一个 jpg 文件位于程序集中的不同位置,并在名称中使用句点 ( ImageLib.Images.cat_embedded.jpg)。

您可以尝试对该字符串进行多种排列来尝试获取 cat_embedded.jpg 图像,但 WPF 不会找到它。

RESX 编辑器

这是另一个项目,它有两张图片,一张标记为资源,一张由 resx 编辑器添加。

enter image description here

这是反汇编的屏幕截图。

enter image description here

如您所见,resx 图像使用与前面嵌入图像示例相同的 URI 位置。
在您的情况下,您将无法使用 Pack URI 从 resx 文件中获取图像。

本地化

根据您在问题中所说的,您要完成的是图像的本地化,对吗?

你看过这篇 MSDN 文章吗?

WPF Globalization and Localization Overview

关于wpf - 将 URI 打包到嵌入 resx 文件中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16409819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com