2013-10-29 73 views
1

我已將圖像logo.bmp添加到我的項目中,但我無法弄清楚如何將它分配給Image類型。我已經通過創建variabale開始:使用項目中包含的圖像

public static Image logo { get; set; } 

,但我無法弄清楚如何我的圖像分配給它。這就是我現在所擁有的:

logo = Image.FromFile("logo.bmp"); 

但是,假定圖像是.exe文件的目錄。什麼是正確的方法來做到這一點?

回答

4

您可以使用System.Reflection.Assembly.GetManifestResourceStream從加載的程序集加載資源。

首先,您必須確保Visual Studio項目中的文件實際上已被嵌入到程序集本身中。右鍵單擊文件並選擇屬性,然後確保構建動作嵌入式資源

現在,您可以從同一程序集中的代碼調用Assembly.GetManifestResourceStream,並使用完全限定的名稱空間(如"YourSolution.YourProject.Images.logo.bmp")指定資源名稱。

您正在使用的Image類具有從名爲Image.FromStream()的流加載的方法。

因此,這裏是你可以做什麼的代碼片段:

Image image; 

var stream = Asssembly.GetExecutingAssembly().GetManifestResourceStream("MySolution.MyProject.Images.logo.bmp"); 

image = Image.FromStream(stream); 

請記住,您可能需要加載這種方式時,從圖像中單獨設置的流。

+0

是Assembely.x所需的命名空間嗎?我在intellisense中看不到該課 – Nathan

+0

對不起,忘了提及它是一種實例方法。您必須指定*哪個*程序集來加載資源。有很多不同的方法來查找程序集......但在大多數情況下'Assembly.GetExecutingAssembly()'起作用。 –

+0

對不起,我不太喜歡裝配的東西。我對C#很陌生,所以我不知道它到底意味着什麼。我在哪裏可以找到我的名字? – Nathan

0

Assembly類是System.Reflection名稱空間的一部分。使用Assembly.GetExecutingAssembly()的替代方案是

typeof(YourClassName).Assembly.GetManifestResourceStream("path.to.your.resource") 

這樣你就可以用一個類型來確定從哪個組件要訪問的資源。

+1

所以這樣的事情? 'logo = typeof(Program).Assembly.GetManifestResourceStream(「POS_System.POS_System.Images.logo.bmp」);'' – Nathan