2010-01-22 56 views
5

我在一個資源文件中有30個PNG,我想在一個計時器內迭代它們。此計時器將表單的背景圖像設置爲序列中的下一個PNG,以生成基本動畫。如何以編程方式訪問資源文件中的圖像?

我找不到一個簡單的方法來枚舉資源文件並獲取實際圖像。我也熱衷於保持對圖像的引用不固定到它們的文件名,以便更新資源文件中圖像的命名不會要求我更新這部分代碼。

注:

  • 資源文件中的圖像按順序( 'image001.png', 'image002.png',......)的名字命名。
  • 此資源文件專門用於存儲這些圖像。
+0

看看我更新的答案 – Fredou 2010-01-22 13:42:44

+0

您更新的答案是我一直在尋找的答謝! – InvertedAcceleration 2010-01-22 15:06:28

+0

檢查此博客出:[社會MSDN](http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/5a38e44d-bb43-4434-b8d5-4246cdc7a97d) – rfonn 2010-01-22 13:20:42

回答

2
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 
     } 

    } 
+0

我明白資源文件的這種用法。我的問題是關於如何將這種用法擴展爲「給出當前圖像,轉到下一張圖像」?你能提供一個代碼示例嗎? – InvertedAcceleration 2010-01-22 13:19:37

1
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

+0

這種方法(這將工作)唯一的問題是,如果我重命名圖像(相對可能發生在這個項目中),我必須回來並更新代碼。你覺得這是不可避免的嗎? – InvertedAcceleration 2010-01-22 13:22:56

+0

你可以得到嵌入式資源的列表,但如果你正在尋找特定的文件,我沒有看到解決方法。如果您知道資源中的唯一文件是您的圖像,那麼您可以使用GetManifestResourceNames() – SwDevMan81 2010-01-22 13:26:54

+0

謝謝,GetManifestResourceNames和GetManifestResourceStream的組合將使我非常接近最終解決方案。 – InvertedAcceleration 2010-01-22 13:39:18

1

這裏是一個很好的教程,關於如何提取CodeProject上的嵌入式資源here,這裏是how使用圖像作爲alpha混合,並顯示如何將其加載到圖像列表。這裏有一個幫助類,使加載嵌入式資源更容易here

希望這會有所幫助, 最好的問候, 湯姆。

相關問題