我在一個資源文件中有30個PNG,我想在一個計時器內迭代它們。此計時器將表單的背景圖像設置爲序列中的下一個PNG,以生成基本動畫。如何以編程方式訪問資源文件中的圖像?
我找不到一個簡單的方法來枚舉資源文件並獲取實際圖像。我也熱衷於保持對圖像的引用不固定到它們的文件名,以便更新資源文件中圖像的命名不會要求我更新這部分代碼。
注:
- 資源文件中的圖像按順序( 'image001.png', 'image002.png',......)的名字命名。
- 此資源文件專門用於存儲這些圖像。
我在一個資源文件中有30個PNG,我想在一個計時器內迭代它們。此計時器將表單的背景圖像設置爲序列中的下一個PNG,以生成基本動畫。如何以編程方式訪問資源文件中的圖像?
我找不到一個簡單的方法來枚舉資源文件並獲取實際圖像。我也熱衷於保持對圖像的引用不固定到它們的文件名,以便更新資源文件中圖像的命名不會要求我更新這部分代碼。
注:
private void Form1_Load(object sender, EventArgs e)
{
var list = WindowsFormsApplication1.Properties.Resources.ResourceManager.GetResourceSet(new System.Globalization.CultureInfo("en-us"), true, true);
foreach (System.Collections.DictionaryEntry img in list)
{
System.Diagnostics.Debug.WriteLine(img.Key);
//use img.Value to get the bitmap
}
}
我明白資源文件的這種用法。我的問題是關於如何將這種用法擴展爲「給出當前圖像,轉到下一張圖像」?你能提供一個代碼示例嗎? – InvertedAcceleration 2010-01-22 13:19:37
感謝您的信息,用這種方法,我需要指定文件的確切名稱,無論如何要避免這種情況? – InvertedAcceleration 2010-01-22 13:24:12
Assembly asm = Assembly.GetExecutingAssembly();
for(int i = 1; i <= 30; i++)
{
Stream file = asm.GetManifestResourceStream("NameSpace.Resources.Image"+i.ToString("000")+".png");
// Do something or store the stream
}
來獲取名稱的所有嵌入的資源:
string[] resourceNames = Assembly.GetManifestResourceNames();
foreach(string resourceName in resourceNames)
{
System.Console.WriteLine(resourceName);
}
此外,在Form1_Load的功能檢查出example。
這種方法(這將工作)唯一的問題是,如果我重命名圖像(相對可能發生在這個項目中),我必須回來並更新代碼。你覺得這是不可避免的嗎? – InvertedAcceleration 2010-01-22 13:22:56
你可以得到嵌入式資源的列表,但如果你正在尋找特定的文件,我沒有看到解決方法。如果您知道資源中的唯一文件是您的圖像,那麼您可以使用GetManifestResourceNames() – SwDevMan81 2010-01-22 13:26:54
謝謝,GetManifestResourceNames和GetManifestResourceStream的組合將使我非常接近最終解決方案。 – InvertedAcceleration 2010-01-22 13:39:18
看看我更新的答案 – Fredou 2010-01-22 13:42:44
您更新的答案是我一直在尋找的答謝! – InvertedAcceleration 2010-01-22 15:06:28
檢查此博客出:[社會MSDN](http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/5a38e44d-bb43-4434-b8d5-4246cdc7a97d) – rfonn 2010-01-22 13:20:42