C#图片存到资源文件,以及调用图片

在程序中会用到图片,有两种方法,一种是将图片放在运行文件夹中,直接调用,另一种是将图片放入资源文件中。

方法一,一般在.exe文件同级创建文件夹,如“ico”,然后把图标放进去。在程序中代码采用相对路径调用。

这种方式的优点是,以后更换图标比较方便,直接替换文件即可。

代码略。

方法二,在一些小程序中,如我们不想程序带有一系列除.exe以外的文件,可以采用导入资源文件中的形式。

导入资源文件,优点有安全、读取调用较快(资源文件序列化存储)、不会有额外的文件(嵌入到程序集中)。

做法:

1. 在程序集中添加资源文件(如果已有则不需添加)。

选则程序集,添加


选择Visual C#项,“资源文件”


添加。

2. 双击打开我们刚新建的“Resource2.resx”,这里我们就可以添加资源了。

如图所示


3. 这时,当我们上传图片的时候,程序会自动生成一个文件夹,这个文件夹放置的就是我们传上去的图片。

4.代码调用

假如我们上传了一个名叫“aaa.jpg”的图片到资源,那么代码里面就只需要这样写:

[csharp] view plaincopy

    Image image = Resource2.aaa;  

这里需要解释一下,为什么这么简单呢,首先Resource2是一个类,它是在我们添加“系统资源文件”操作后自动创建的,aaa是它的类的一个静态属性,是当我们成功上传一个图片是自动添加的。所以我们直接写Resource2.aaa就可以了。

下面贴出Resource2类的部分代码,作参考了解。

[csharp] view plaincopy

internal class Resource1 {  

  

    //...  

  

    /// <summary> 

    ///   查找 System.Drawing.Bitmap 类型的本地化资源。  

    /// </summary>  

    internal static System.Drawing.Bitmap aaa  

    {  

        get  

        {  

            object obj = ResourceManager.GetObject("GdbConnection16", resourceCulture);  

            return ((System.Drawing.Bitmap)(obj));  

        }  

    }  

  

    //...  

可以看到

第一,类和方法的修饰是internal,也就是只能在本程序集中调用。

第二,aaa是该类的一个静态属性,所以直接用类名调用。

第三,aaa的类型定义的Bitmap,所以我们的Image可以直接用它来赋值。

这些都是封装好了的,我们只需要按照一定的方式导入,然后用代码直接调用就OK了。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要释放内嵌的资源文件到指定位置,你可以使用以下步骤: 1. 确保你的资源文件已经嵌入到了程序集中。可以在 Visual Studio 中的资源文件管理器中确认。 2. 使用 `Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)` 方法获取嵌入资源的流。其中 `resourceName` 是你的资源文件的完整名称,包括命名空间和文件名。 3. 创建一个新的文件流,指定你想要将资源文件释放到的位置。 4. 通过将嵌入资源的流复制到新的文件流中,将资源文件释放到指定位置。你可以使用 `Stream.CopyTo()` 方法来实现这一点。 下面是一个示例代码,展示了如何释放内嵌的资源文件到指定位置: ```csharp using System; using System.IO; using System.Reflection; public class ResourceManager { public static void ExtractResourceToFile(string resourceName, string targetPath) { using (Stream resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) { if (resourceStream == null) { throw new ArgumentException($"Resource '{resourceName}' not found."); } using (FileStream fileStream = File.Create(targetPath)) { resourceStream.CopyTo(fileStream); } } } } ``` 你可以调用 `ResourceManager.ExtractResourceToFile(resourceName, targetPath)` 方法,将资源文件释放到指定位置。其中 `resourceName` 是嵌入资源的完整名称,`targetPath` 是要释放到的目标位置的文件路径。 希望这能帮助到你!如果有任何问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值