前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF 从文件创建图片的方法

WPF 从文件创建图片的方法

作者头像
林德熙
发布2022-08-04 14:35:41
1K0
发布2022-08-04 14:35:41
举报
文章被收录于专栏:林德熙的博客林德熙的博客

本文告诉大家通过 FileStream 创建文件的方法

如果直接通过文件的 URL 创建,那么可能出现文件被占用的问题,不能比较好做文件的修改,建议通过内存的方式加载

下面是通过内存加载的代码

代码语言:javascript
复制
            var bitmapImage = new BitmapImage();
            using (var fileStream = new FileStream("文件路径", FileMode.Open))
            {
                var memoryStream = new MemoryStream();

                fileStream.CopyTo(memoryStream);

                memoryStream.Seek(0, SeekOrigin.Begin);

                bitmapImage.BeginInit();
                bitmapImage.StreamSource = memoryStream;
                bitmapImage.EndInit();
            }

通过这个方法加载的图片没有做内存的优化,也就是图片多大,占用的内存就多大

这里存在两个坑,第一个是 memoryStream 在复制之后需要移动到前面,如果没有设置,就会出现下面的代码

代码语言:javascript
复制
FileFormatException: 无法对此图像进行解码。该图像头可能已损坏。

通过设置 memoryStream.Seek(0, SeekOrigin.Begin) 可以解决这个问题,原因是这个流在复制的时候会将指针放在流的最后,但是图片的解析需要将流指针放在最前这样才可以解析

那么此时的 memoryStream 是否可以释放?

如果调用了 memoryStream.Dispose 就会显示空白而不是图片

代码语言:javascript
复制
            var bitmapImage = new BitmapImage();
            using (var fileStream = new FileStream("E:\\文档\\图片\\2018102016485273.jpg", FileMode.Open))
            {
                var memoryStream = new MemoryStream();

                fileStream.CopyTo(memoryStream);

                memoryStream.Seek(0, SeekOrigin.Begin);

                bitmapImage.BeginInit();
                bitmapImage.StreamSource = memoryStream;
                bitmapImage.EndInit();

                // 下面的代码会让图片显示空
                //memoryStream.Dispose();
            }

因为图片需要读取内容,但是内容已经是空的,就没有显示

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档