【问题标题】:C#: Accessing image added to project folderC#:访问添加到项目文件夹的图像
【发布时间】:2011-01-25 08:07:11
【问题描述】:

我想知道以下内容:我将文件夹“Graphics”添加到我的项目中,并在其中插入了一个 BMP。现在我想从我的代码中加载图像,但我不知道如何。我知道资源很简单,但是有没有办法不将图像添加到资源中?谢谢

【问题讨论】:

标签: c# visual-studio image embedded-resource


【解决方案1】:

获取资源:

myNamespace.Properties.Resources.images.<imagename>

您可以将其转换为您需要的类型(或使用函数,例如 FromFile)

【讨论】:

    【解决方案2】:

    您应该在文件属性中指定在构建应用程序时必须部署它:

    复制到输出目录:总是复制

    然后您可以使用Image.FromFile 方法访问该文件,该路径将与您的项目中的完全相同。

    【讨论】:

    • 如果你这样做,那么它不是嵌入式资源。如果您在用户只是复制 exe 而不是整个文件夹时不处理丢失的文件,您可能会遇到一些严重的问题。
    【解决方案3】:

    我曾经也想过这个问题,所以我想通了并把它放在了blog post 中。对于您的示例,它应该是这样的:

    var a = Assembly.GetExecutingAssembly(); // Or another Get method if you need to get it from some other assembly
    
    var image = Image
        .FromStream(a.GetManifestResourceStream("DefaultNameSpace.Graphics.image.bmp"));
    

    请记住将图像标记为嵌入式资源,并在完成后处理图像,以免泄漏:)

    【讨论】:

    • 谢谢。如果我将“内容”保留为构建操作会怎样?并且请-命名空间程序集属于什么?我无法调用它。
    • DefaultNamespace 是您在项目设置中提供的命名空间。它默认为您的项目的名称。如果您使用内容构建操作,我认为该文件将被复制到您的输出目录。如果你这样做,你将不得不使用Image.FromFile("pathtoimage.bmp") 或类似的东西。
    • 你需要包含我认为的 System.Reflection 命名空间:using System.Reflection;
    【解决方案4】:

    您可以直接从文件系统加载图像

    Image img = Image.FromFile("\Graphics\ImageName.bmp");

    MSDN 文档在这里

    http://msdn.microsoft.com/en-us/library/system.drawing.image.fromfile.aspx

    显然,您需要知道要从中加载的目录和名称。

    【讨论】:

      【解决方案5】:

      我用过类似的东西。在 YouTube 教程视频中得到它。

      return new BitmapImage(new Uri($"pack://application:,,,/Images/imageFile.png"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-04
        • 2013-10-19
        • 2017-05-02
        • 1970-01-01
        • 2023-03-07
        • 2013-12-17
        • 2012-05-22
        相关资源
        最近更新 更多