Visual Studio:如何将图像资源存储为嵌入式资源?

时间:2008-11-10 19:08:04

标签: visual-studio image

默认情况下,当您将图像(图标,位图等)作为资源添加到项目时,图像的构建操作将设置为。这样做是因为图像神奇地存储在.resources文件中。

希望将资源存储为嵌入式资源(我的理由无关紧要,但我们只是假装它,以便我可以在 {中看到它们{3}} )。

所以我将每个图像的构建操作更改为嵌入式资源,然后资源出现在Lutz的Reflector中 - 完全按照我的意愿。

很遗憾RedGate's Reflector

  

注意资源编辑器   添加图片,它将构建操作设置为   ,因为.resx文件   引用图像文件。在构建   时间,图像被拉进了   .resources文件创建出来的   .resx文件。然后可以轻松地拍摄图像   通过强类型访问   为.resx自动生成的类   文件。

     

因此,你不应该改变   此设置为嵌入式资源,   因为这样做会包括   在装配中两次成像。

那么将图像作为嵌入资源包含的正确方法是什么?

4 个答案:

答案 0 :(得分:43)

注意:此答案不是处理图像资源的推荐方法。它只是解决问题所描述的特定问题(即将图像包含为嵌入式资源)。

不要将图像添加为资源。我宁愿做以下事情:

  • 创建图像/图标并将其保存到文件
  • 选择项目 - >添加现有项目并添加文件
  • 将构建操作设置为嵌入资源

然后,您可以使用

访问此资源
Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceUri)

这样,图像会神奇地添加到项目资源文件中,并且只有一个图像副本存储在程序集的资源中。

答案 1 :(得分:11)

在项目视图中,打开Properties子树;双击Resources.resx项。

(如果没有,请右键单击“属性”项并选择“打开”,然后单击左侧的“资源”选项卡,单击页面中间的链接以创建默认资源文件。)

点击resources.resx页面顶部的第一个下拉列表。它可能会说像“Strings”这样无用的东西,并选择Images。或者,您可以按 Ctrl + 2 。这将更改为“图像资源”视图。现在单击“添加资源”下拉列表,然后选择“现有文件”。选择图像文件,然后单击“打开”。如果您愿意,可以重命名该资源。

单击“保存”图标。

您现在可以编程方式访问嵌入式资源:

[namespace].Properties.Resources.[yourResourceName]

答案 2 :(得分:6)

在VS 2005中:

  • 右键单击您的项目 选择添加新项目。
  • 添加资源文件。打电话是 的 myImages.resx
    将此文件放在项目的根文件夹中。
  • 右键点击 myImages.resx 并选择“视图设计器”
  • 选择添加资源,添加现有 文件。
  • 浏览图片,例如的 stop.bmp
    此阶段不必将此图像包含在项目中。资源文件将自动执行此操作。

要在代码中引用图像,请使用以下内容:

btnStop.Image = myImages.Stop;

答案 3 :(得分:5)

这取决于您想要如何使用图像。

如果您想本地化和访问特定文化的特定图像,那么使用ResourceManager是一个很好的方法,因为它为附属程序集,搜索,后备等提供了一些很好的功能。

如果您只想在程序集中嵌入资源并且不担心本地化(使用Assembly.GetManifestResourceStream),那么只需添加图像并将构建操作设置为Embedded Resource即可。

文档警告您不要将构建操作设置为Embedded Resource,因为资源已由资源编译器通过.resx文件编译到程序集中。