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);

 

posted @ 2022-06-02 16:11  驼七  阅读(1342)  评论(0)    收藏  举报