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); |
常用的方式為第二種方式和第六種方式。