ImageSource使用心得(轉)


很多時候,我們會使用圖片來裝飾UI,比如作為控件背景等。

而這些圖片可以分為兩種形式,即存在於本地文件系統中的圖片和存在於內存中的圖片

對於這兩種形式的圖片,在WPF中,使用方法不同,下面主要說明針對這兩種形式圖片的使用方法

一、存在於本地文件系統中的圖片文件

對於此類圖片,使用非常簡單,在xaml中直接指定路徑即可,如:

1WPF中的imagesource - 渺兒 - miaoerjyzhu的博客<Button>

2WPF中的imagesource - 渺兒 - miaoerjyzhu的博客    <Button.Background>

3WPF中的imagesource - 渺兒 - miaoerjyzhu的博客        <ImageBrush ImageSource="bg.jpg"/>

4WPF中的imagesource - 渺兒 - miaoerjyzhu的博客    </Button.Background>

5WPF中的imagesource - 渺兒 - miaoerjyzhu的博客</Button>

對應的的C#代碼為

1WPF中的imagesource - 渺兒 - miaoerjyzhu的博客ImageBrush imageBrush = new ImageBrush();

2WPF中的imagesource - 渺兒 - miaoerjyzhu的博客imageBrush.ImageSource = new BitmapImage(new Uri("bg.jpg", UriKind.Relative));

3WPF中的imagesource - 渺兒 - miaoerjyzhu的博客button.Background = imageBrush;

其中imageBrush.ImageSource的類型為ImageSource,而ImageSource是個抽象類,

因此我們不能直接使用它,而是使用它的子類來代替,查閱MSDN,可以看到它們的繼承關系:

System.Windows.Media.ImageSource

   System.Windows.Media.DrawingImage 

      System.Windows.Media.Imaging.BitmapSource

二、存在於內存中的圖片

 對於只存在於內存中的圖片,用以上方法就顯得無能為力了,我們應該另尋他法,下面介紹一種方法:

先看代碼:

1WPF中的imagesource - 渺兒 - miaoerjyzhu的博客//此處圖片從文件中讀入用以模擬內存中的圖片

2WPF中的imagesource - 渺兒 - miaoerjyzhu的博客System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap("bg.jpg");

3WPF中的imagesource - 渺兒 - miaoerjyzhu的博客MemoryStream stream = new MemoryStream();

4WPF中的imagesource - 渺兒 - miaoerjyzhu的博客bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);

5WPF中的imagesource - 渺兒 - miaoerjyzhu的博客ImageBrush imageBrush = new ImageBrush();

6WPF中的imagesource - 渺兒 - miaoerjyzhu的博客ImageSourceConverter imageSourceConverter = new ImageSourceConverter();

7WPF中的imagesource - 渺兒 - miaoerjyzhu的博客

8WPF中的imagesource - 渺兒 - miaoerjyzhu的博客imageBrush.ImageSource = (ImageSource)imageSourceConverter.ConvertFrom(stream);

9WPF中的imagesource - 渺兒 - miaoerjyzhu的博客button.Background = imageBrush;

其中bitmap即是存在於內存中的Bitmap類型圖片,此處使用直接加載本地圖片文件模擬。

步驟是先將它保存到流中,再使用ImageSourceConverter 類的ConvertFrom方法從流中得到我們需要的圖片

OK,本文到此結束,以上方法都是自己在使用中探索所得,如果有更好的方法,本人非常願意和各位交流。

 

原文地址:http://shansun123.iteye.com/blog/587695


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM