很多時候,我們會使用圖片來裝飾UI,比如作為控件背景等。
而這些圖片可以分為兩種形式,即存在於本地文件系統中的圖片和存在於內存中的圖片
對於這兩種形式的圖片,在WPF中,使用方法不同,下面主要說明針對這兩種形式圖片的使用方法
一、存在於本地文件系統中的圖片文件
對於此類圖片,使用非常簡單,在xaml中直接指定路徑即可,如:
1<Button>
2 <Button.Background>
3 <ImageBrush ImageSource="bg.jpg"/>
4 </Button.Background>
5</Button>
對應的的C#代碼為
1ImageBrush imageBrush = new ImageBrush();
2imageBrush.ImageSource = new BitmapImage(new Uri("bg.jpg", UriKind.Relative));
3button.Background = imageBrush;
其中imageBrush.ImageSource的類型為ImageSource,而ImageSource是個抽象類,
因此我們不能直接使用它,而是使用它的子類來代替,查閱MSDN,可以看到它們的繼承關系:
System.Windows.Media.ImageSource
System.Windows.Media.DrawingImage
System.Windows.Media.Imaging.BitmapSource
二、存在於內存中的圖片
對於只存在於內存中的圖片,用以上方法就顯得無能為力了,我們應該另尋他法,下面介紹一種方法:
先看代碼:
1//此處圖片從文件中讀入用以模擬內存中的圖片
2System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap("bg.jpg");
3MemoryStream stream = new MemoryStream();
4bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
5ImageBrush imageBrush = new ImageBrush();
6ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
7
8imageBrush.ImageSource = (ImageSource)imageSourceConverter.ConvertFrom(stream);
9button.Background = imageBrush;
其中bitmap即是存在於內存中的Bitmap類型圖片,此處使用直接加載本地圖片文件模擬。
步驟是先將它保存到流中,再使用ImageSourceConverter 類的ConvertFrom方法從流中得到我們需要的圖片