其他分享
首页 > 其他分享> > System.Drawing.Bitmap要如何转换成WPF中可用的ImageSource呢?

System.Drawing.Bitmap要如何转换成WPF中可用的ImageSource呢?

作者:互联网

在一般情况下,如果我们有一些图片需要显示在WPF的应用程序中,通常我们会使用Image,以及指定Image.Source属性,例如说下面这样


在一般情况下,如果我们有一些图片需要显示在WPF的应用程序中,通常我们会使用Image,以及指定Image.Source属性,例如说下面这样
img1.Source =
   new BitmapImage(new Uri(@"image file path", UriKind.RelativeOrAbsolute));

利用这样的方式,将图片文件显示在Imagez上面;如果来源是byte array的话,会利用类似这样的方式
           System.IO.FileStream fs =                 new System.IO.FileStream(filepath, 
                    System.IO.FileMode.Open, System.IO.FileAccess.Read);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();
            fs.Dispose();

            System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.BeginInit();
            bitmapImage.StreamSource = ms;
            bitmapImage.EndInit();
            img1.Source = bitmapImage;
这样就可以由byte数组转换成WPF中可以使用的图片来源了,不过上面这段程序有个问题需要处理,在memoryStream的部分,上面并没有看到Dispose的部分,这样子不会产生一些内存耗用的状况吗?于是尝试加上了MemortStream.Dispose的部分之后发现‘疑?阿图片怎么显示不出来了’,这个部分请参考一下
Convert memory stream to BitmapImage?
必须要指定CacheOption的属性,强制在载入的时候去读取,才会确保显示的正常;不然如果需要载入的时候,memorystream已经被释放掉了,就会造成上面说的图片无法显示的状况了。稍加修改之后,程序会像是这样
            System.IO.FileStream fs = 
                new System.IO.FileStream(filepath, 
                    System.IO.FileMode.Open, System.IO.FileAccess.Read);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();
            fs.Dispose();

            System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.BeginInit();
            bitmapImage.StreamSource = ms;
            bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
            bitmapImage.EndInit();
            ms.Dispose();
            img1.Source = bitmapImage;

好,看完了一般情况的使用之后,来看一下System.Drawing.Bitmap的部分;会什么会有这个需求呢?假设今天你调用的是第三方厂商提供的dll,dll回传的就已经是System.Drawing.Bitmap的话,就会遇到需要转换的状况了。那么应该怎么转换呢?下面列出两种方式作为参考

原文:大专栏  System.Drawing.Bitmap要如何转换成WPF中可用的ImageSource呢?



标签:BitmapImage,bitmapImage,System,Bitmap,fs,IO,new,WPF
来源: https://www.cnblogs.com/petewell/p/11474161.html