WPF_ImageSource怎么赋值
很多时候,我们会使⽤图⽚来装饰UI,⽐如作为控件背景等。
⽽这些图⽚可以分为两种形式,即存在于本地⽂件系统中的图⽚和存在于内存中的图⽚
对于这两种形式的图⽚,在WPF中,使⽤⽅法不同,下⾯主要说明针对这两种形式图⽚的使⽤⽅法
1.存在于本地⽂件系统中的图⽚⽂件对于此类图⽚,使⽤⾮常简单,
1.1在xaml中直接指定路径即可,如:
<Button> <Button.Background> <ImageBrush ImageSource="bg.jpg"/> </Button.Background> </Button>
1.2对应的的C#代码为
mageBrush imageBrush = new ImageBrush(); imageBrush.ImageSource = new BitmapImage(new Uri("bg.jpg", UriKind.Relative)); button.Background = imageBrush;
其中imageBrush.ImageSource的类型为ImageSource,⽽ImageSource是个抽象类,
因此我们不能直接使⽤它,⽽是使⽤它的⼦类来代替,查阅MSDN,可以看到它们的继承关系:
System.Windows.Media.ImageSource
System.Windows.Media.DrawingImage
System.Windows.Media.Imaging.BitmapSource
2.存在于内存中的图⽚
对于只存在于内存中的图⽚,⽤以上⽅法就显得⽆能为了,我们应该另寻他法,下⾯介绍⼀种⽅法:
先看代码:
//此处图⽚从⽂件中读⼊⽤以模拟内存中的图⽚ System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap("bg.jpg"); MemoryStream stream = new MemoryStream(); bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png); ImageBrush imageBrush = new ImageBrush(); ImageSourceConverter imageSourceConverter = new ImageSourceConverter(); imageBrush.ImageSource = (ImageSource)imageSourceConverter.ConvertFrom(stream); button.Background = imageBrush;
其中bitmap即是存在于内存中的Bitmap类型图⽚,此处使⽤直接加载本地图⽚⽂件模拟。
步骤是先将它保存到流中,再使⽤ImageSourceConverter 类的ConvertFrom⽅法从流中得到我们需要的图⽚
3.以上来自
https://wenku.baidu.com/view/519458250440be1e650e52ea551810a6f524c8ed.html
4.封装Bitmap to BitmapImage
public static BitmapImage GetBitmapImageBybitmap(Bitmap bitmap) { BitmapImage bitmapImage = new BitmapImage(); try { using (MemoryStream ms = new MemoryStream()) { bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png); bitmapImage.BeginInit(); bitmapImage.StreamSource = ms; bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); bitmapImage.Freeze(); } } catch (Exception ex) { throw ex; //log.ErrorFormat("bitmap to BitmapImage Failed:" + ex.Message); } return bitmapImage; }
5.四行代码解决 Bitmap to BitmapImage
MemoryStream stream = new MemoryStream(); bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);//bmp为拿到的bmp对象 Bitmap bmp = new Bitmap(w, h); ImageSourceConverter imageSourceConverter = new ImageSourceConverter(); myImage.Source = (ImageSource)imageSourceConverter.ConvertFrom(stream);

浙公网安备 33010602011771号