請問c# 做wpf程序是如何將圖片嵌入到exe程序裡面的?

我的ide是vs2017,一開始在程序中插入了標籤:

&&

後發現我的程序只有在我的電腦才能顯示出圖片,去到別的電腦就沒有圖片了,因為程序是讀取我本地硬碟的圖片路徑.上網搜資料發現要用資源文件,所以我把圖片添加到資源文件中,並且設置了圖片屬性的生成操作為"嵌入的資源"

但是在我重新編譯後發現問題還是存在,所以個人猜想問題原因是圖片路徑設置還是原來的&&導致出現問題. 所以我想問的是:把圖片添加到資源文件後要怎麼樣寫這個路徑才能調用嵌入到程序里的圖片?

沒學過wpf,只是略懂皮毛,希望回答能夠詳細一點,萬分感激.手動呼叫輪子哥@vczh


對,你要把圖片先嵌入到resource裡面,然後給他一個key,然後在代碼里引用這個resource,然後去訪問這個key。具體過程我忘記了,自行bing攻略。


難道就我這麼一個在res.h用了一個5M的數組存Wav還給他xor了一遍的?

這麼說出來會不會被打死……

吐槽一句,這個頭文件要是用vs打開會卡死,然而編譯時倒是挺快的


1.使用相對路徑:可以更方便地管理項目資源。

2.如果你需要將寫好的程序打包成單個exe文件,而不想附加一個圖片文件夾時,可以在項目中右鍵 --&> 選擇properties --&> 將Build Action改為Resource。

順便附加,如果你是希望自己的程序以單個exe發行,而不需要帶一堆dll,可以試試下面這個庫:

https://github.com/Fody/Fody

對於平時自己寫的一些小項目很有用,但不建議大型項目這麼做。


不匿名反對輪子 @vczh ,這個問題他給的答案是沒有什麼卵用的,不能用於大規模的wpf開發。他提供的使用方式停留在《XXX從入門到精通》這種書介紹的使用方式上。

1.首先你要學會在項目里使用相對路徑,如下圖,在GUI主工程目錄里創建等資源目錄Resource,再創建相應的子目錄。提示音,圖片什麼的可以放這個目錄里。

2.使用的時候,和我上面的圖一樣,使用相對路徑。就可以解決你說的所有問題。

以上的管理方式,適用於軟體的工業化生產,無論你的應用是有幾十個還是幾百個窗體,都沒有問題,整體針對資源的管理都是很清晰明了的,成員配合開發也不會有問題。你要寫個toy,搞幾個窗體玩玩,當我沒說。

我的觀點是在理論中實踐,在實踐中探索有利於我們生產的改進。不做學院派。什麼是學院派?資料庫關係理論說設計要遵守三範式,學院派就會把我們的數據表關係拉的像蜘蛛網一樣。假設當你的應用是單庫數百張張表,有著很複雜的業務。學院派的生產產物有 很高的可能性是不合格的,說到這裡也不用我再多解釋了吧~

新手上路,需要老司機告訴他們的難道不是莫打滾爬出來的經驗?


你大概需要相對路徑


看你的樣子還沒入門吧,可以看看我這個項目,WPF還是很好入門的。

手機懶得打字了。

https://github.com/1217950746/Arthas-WPFUI


不知道我是不是來晚了 不知道樓主的問題解決了嗎?

我看了他們的回答 似乎不太切題。

有兩點樓主要注意

1 嵌入的資源可以用 但不是你真么用 且WPF不能直接用 要自己寫extension載入資源

2 不要用嵌入的資源 要用Resource 建議圖片放到你的工程里 不過不是必須的 但是xaml的路徑一定要用邏輯結構的相對路徑

因為 在你的場景下 圖片在兩個地方有載入

1.編譯時的載入: 也就是這個資源的位置 其實由於你編譯是在你自己的電腦上 所以這個其實是可以找到的 你的資源也成功放到exe里了 這個沒問題。不過建議你吧圖片放到工程里 用相對路徑 這樣你可以換其他電腦編譯無問題。

2 運行時的載入: 你的xaml里也用的E:這個路徑 根本沒有往程序的資源里找 即使exe里有圖片 但你的xaml要求到E盤裡找 所以在其他電腦找不到 應該根據你vs2017里顯示的目錄結構 確定相對路徑即可


http://Properties.Resource.xxx


@vczh 輪子哥,剛翻了WPF編程寶典里添加資源這章節,也看了你在上面的回答,你說的方法是不是就是圖片紅色框里的方法?

書上說不支持啊,你說的到底是哪種方法??

我也是很懵逼的。

@OneNoodle 你說的是不是就是圖片里推薦的方法?


推薦閱讀:

MFC 作為 Windows 原生的 GUI 庫還可以在項目中用嗎?
程序員如何挽救日漸失控的項目?
如何評價王垠的 《討厭的 C# IDisposable 介面》?
如今 Windows 軟體開發究竟該用什麼庫,C#、Qt,還是其他?
當一個程序員失去了對代碼的興趣,變得沒有目標沒有動力,是怎樣的體驗?

TAG:編程 | C# | WindowsPresentationFoundationWPF |