我已將圖像logo.bmp
添加到我的項目中,但我無法弄清楚如何將它分配給Image
類型。我已經通過創建variabale開始:使用項目中包含的圖像
public static Image logo { get; set; }
,但我無法弄清楚如何我的圖像分配給它。這就是我現在所擁有的:
logo = Image.FromFile("logo.bmp");
但是,假定圖像是.exe文件的目錄。什麼是正確的方法來做到這一點?
我已將圖像logo.bmp
添加到我的項目中,但我無法弄清楚如何將它分配給Image
類型。我已經通過創建variabale開始:使用項目中包含的圖像
public static Image logo { get; set; }
,但我無法弄清楚如何我的圖像分配給它。這就是我現在所擁有的:
logo = Image.FromFile("logo.bmp");
但是,假定圖像是.exe文件的目錄。什麼是正確的方法來做到這一點?
您可以使用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);
請記住,您可能需要加載這種方式時,從圖像中單獨設置的流。
Assembly類是System.Reflection名稱空間的一部分。使用Assembly.GetExecutingAssembly()的替代方案是
typeof(YourClassName).Assembly.GetManifestResourceStream("path.to.your.resource")
這樣你就可以用一個類型來確定從哪個組件要訪問的資源。
所以這樣的事情? 'logo = typeof(Program).Assembly.GetManifestResourceStream(「POS_System.POS_System.Images.logo.bmp」);'' – Nathan
是Assembely.x所需的命名空間嗎?我在intellisense中看不到該課 – Nathan
對不起,忘了提及它是一種實例方法。您必須指定*哪個*程序集來加載資源。有很多不同的方法來查找程序集......但在大多數情況下'Assembly.GetExecutingAssembly()'起作用。 –
對不起,我不太喜歡裝配的東西。我對C#很陌生,所以我不知道它到底意味着什麼。我在哪裏可以找到我的名字? – Nathan