2010-11-02 91 views
2

從我所看到的,WPF圖像的源代碼是BitmapSource對象,而資源圖像是作爲位圖讀取的。我很容易找到一種將圖像從位圖格式轉換爲BitmapSource格式的方法,但是我相信每次需要圖像時運行此轉換在性能和內存消耗方面都很昂貴(Bitmaps本身是靜態的,但我猜測轉換爲BitmapSource分配一個新的對象)。在WPF中使用資源圖片

我想過要爲BitmapSource對象存放內存緩存,這樣我只需要對每個映像運行一次轉換。但是,我很難相信這是解決這個問題的恰當方法。

應用程序的性質是數據隨時間推移而業務對象從不處置。因此,這種假設只有在實現將保存這些靜態圖像的靜態資源的情況下才會成立。

我非常感謝正確的解決方案爲這個問題。

回答

1

我不確定我明白你的意思,但你可以使用像這樣的資源。
如果您有一個名爲「B1.png」的圖像資源,並且您將「生成操作」設置爲「資源」,則可以像這樣在xaml中使用它。

<Image Name="c_image" Source="/YourAssemblyName;component/Resources/B1.png" /> 

,並在後面的代碼是這樣

Image img = new Image(); 
BitmapImage bitmapImage = new BitmapImage(); 
bitmapImage.BeginInit(); 
bitmapImage.UriSource = new Uri("pack://application:,,,/YourAssemblyName;component/Resources/B1.png"); 
bitmapImage.EndInit(); 
img.Source = bitmapImage; 
+0

Meleak,感謝您的回答。我也不確定我是否理解你的解決方案。我有兩個問題:1.代碼是強制性的嗎?資源可以直接在XAML中使用嗎? 2.你知道WPF框架是否會在舞臺後面進行轉換,或者這個代碼真的更有效嗎? – sagibb 2010-11-23 07:50:06

+0

@tutipute:後面的代碼僅用於在代碼後面創建圖像。 xaml方法不使用代碼(所以是的,可以直接在xaml中使用)。如果您在設計器中添加圖像,請查看其屬性並按源,然後您可以從對話框中選擇源(​​將顯示所有適用的資源)。之後你可以檢查xaml中的uri。請注意,資源的構建操作必須設置爲「資源」。 – 2010-11-23 10:20:25

+0

@tutipute:回答問題2:這是在WPF中爲圖像使用資源的方式,所以我確定它非常優化。 – 2010-11-23 10:25:39