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);

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM