winform 获取图片资源的几种方式[转]

winform程序获取图片资源大体有这几种方式
//1、使用嵌入的资源,资源是在编译时添加到程序集中的
//2、把资源清单添加到 “命名空间.Properties.Resources.resx”中
//3、直接引用绝对路径的文件。
//首先总结几种获得程序集的方法,具体区别请根据语义比较

1
2
3
//Assembly assem=typeof(Resources).Assembly
//Assembly assem = this.GetType().Assembly;
//Assembly assembly = Assembly.GetExecutingAssembly();

第一种方式:

1
2
//直接引用本机计算机的绝对路径,局限性太大。
this.BackgroundImage = new Bitmap(@"C:\WINDOWS\Web\Wallpaper\Bliss.bmp");

第二种方式:

1
2
3
4
5
6
7
8
9
10
11
12
//需要把图片资源设置为 嵌入的资源,推荐这种方式
    string backimgpath = "命名空间.resources.aa.jpg";
    Assembly assem = this.GetType().Assembly;
    foreach (string resourceName in assem.GetManifestResourceNames())
    {
        if (backimgpath == resourceName)
        {
            // MessageBox.Show(resourceName);
            Stream stream = assem.GetManifestResourceStream(backimgpath);
            this.BackgroundImage = new Bitmap(stream);
        }
    }

第三种方式:

1
2
//如果资源和 加载资源所用的类使用了相同的命名空间,可以简写如下:不推荐,有局限性。
this.BackgroundImage = new Bitmap(this.GetType(), "btn_close.png");

第四种方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
//首先用ResGen.exe把Resource1.resx文本生成为Resource1.resources二进制文件。
//并且把资源文件会独立处理,与可执行文件同目录
    using (ResourceReader reader = new ResourceReader(@"Resource1.resources"))
    {
        foreach (System.Collections.DictionaryEntry entry in reader)
        {
            if (entry.Key.ToString() == "aa")
            {
                this.BackgroundImage = (Image)entry.Value;
            }
 
        }
    }

第五种方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//使用ResXResourceReader类 读取资源
//这一步需要在项目中添加resx文件,并且把资源文件和resx配置文件属性设置为:始终复制
//这种方式也会 在可执行文件目录存放 图片资源和resx文件。
    using (ResXResourceReader reader = new ResXResourceReader(@"Resource1.resx"))
    {
        foreach (System.Collections.DictionaryEntry entry in reader)
        {
            if (entry.Key.ToString() == "aa")
            {
                // Set form caption from string resource
                this.BackgroundImage = (Image)entry.Value;
            }
        }
    }

第六种方式:

1
2
3
4
5
//使用ResourceManager类(资源管理器),aa为Resources中的名称
  ResourceManager resman = new ResourceManager("命名空间.Properties.Resources", assem);
  this.BackgroundImage = (Bitmap)resman.GetObject("aa");
//或者直接这样写,name为资源中已有的名称
   this.BackgroundImage =(Bitmap)Properties.Resources.ResourceManager.GetObject(name);

常用的方式为第二种方式和第六种方式。

posted @   —八戒—  阅读(10084)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示