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