title author date CreateTime categories
WPF 从文件创建图片的方法
lindexi
2018-12-27 11:37:46 +0800
2018-12-27 11:37:46 +0800
WPF

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

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

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

            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 在复制之后需要移动到前面,如果没有设置,就会出现下面的代码

FileFormatException: 无法对此图像进行解码。该图像头可能已损坏。

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

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

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

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

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

2018-12-27-WPF-从文件创建图片的方法的更多相关文章

  1. ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98) [30-Jan-2018 16:12:27] ERROR: FPM initialization failed解决方法

    1.php启动之后发现访问nginx出现502错误,检查nginx.conf发现指定的php socket不存在 2.解决方法nginx修改陈这样,直接把绿色部门的socket写成本地地址+端口就可以 ...

  2. WPF获得PNG图片外观Path数据

    原文:WPF获得PNG图片外观Path数据        WPF开发界面的时候,用的最多的就是自定义控件模板,开发人员需要根据UI的设计,做出符合要求的自定义控件.但是在一些特殊情况下,UI的设计可能 ...

  3. 2018.12.02 Socket编程之初识Socket

    Socket编程主要分为TCP/UDP/SCTP三种,每一种都有各自的优点,所以会根据实际情况决定选用何种Socket,今天开始我将会逐步学习Socket编程,并将学习过程记录于此. 今天学习的是TC ...

  4. OPPO Developers Conference(2018.12.26)

    时间:2018.12.26地点:北京国家会议中心

  5. Tencent Cloud Developers Conference(2018.12.15)

    时间:2018.12.15地点:北京朝阳悠唐皇冠假日酒店

  6. 2018.12.1 Test

    目录 2018.12.1 Test A 串string(思路) B 变量variable(最小割ISAP) C 取石子stone(思路 博弈) 考试代码 B C 2018.12.1 Test 题目为2 ...

  7. 12.27 cf div3 解题报告

    12.27 cf div3 解题报告 wxy.wxy,带上分拉,全场做了个无脑小白 比赛场地 A: T1,跟着模拟就好了 B: sort一遍之后 去除的数一定是a[1]或者a[n] 比较去除谁小就输出 ...

  8. 「版本升级」MyEclipse CI 2018.12.0正式发布

    新版本MyEclipse为WildFly 14新增一个新的服务器连接器,改进性能并新增一些Java 10修复程序.新版本为IDE做了几个核心修复,这是MyEclipse 2018一个更棒的升级. [M ...

  9. 微信小程序 - 接口更新记录以及解决方案(2018/12/26)

    2018/8/17 - 背景音频需要在app.json添加requireBackGroundModes 2018/9/12 - 微信更改获取用户信息接口/获取位置等接口 - button 2018/1 ...

随机推荐

  1. name和value的简单js用法

    name和value: 例如: <input type="text" name="txt"/> name用于定义这个input收到的值的变量名,在上 ...

  2. Mycat+MySQL 主从复制

    一.主从复制搭建(新环境5.6.33)1.设置复制Master配置信息 [mysqld] #repl master库 server \logbin\mysql-bin max_binlog_size= ...

  3. VS中warning MSB8004和error MSB4018解决方案

    问题如下: warning MSB8004: Output Directory does not end with a trailing slash.  This build instance wil ...

  4. 使用 windows 批处理指令(BAT文件)进行压缩文件(zip)解压操作

    以下指令包括文件删除.复制.zip文件解压操作.使用7z指令指令进行解压操作前,需要确保 windows 的 path 系统环境变量中存在7z的安装路径. 7z的下载地址:https://www.7- ...

  5. 探索云网络技术前沿,Sigcomm 2019 阿里云参会分享

    Sigcomm 2019简介 一年一度的网络顶级学术峰会Sigcomm于8月20日至22日在北京举行.作为ACM Special Interest Group on Data Communicatio ...

  6. ubuntn右上角小键盘消失及fictx切换输入法快捷键

    Ubuntu任务栏右上角的小键盘消失,打开系统设置-文本输入-左下角将当前输入法显示在任务栏. 切换输入法快捷键,打开系统设置 > 文件输入 >切换到下一个源(上一个源)的快捷键设置一个不 ...

  7. Docx 生成word文档二

    /// <summary> /// 生产word 文档 /// </summary> public class GenerateWord { /// <summary&g ...

  8. TZ_16ES6学习总结

    1.块级作用域的引入 在ES6之前,js只有全局作用域和函数作用域,ES6中let关键字为其引入了块级作用域. { var a = 5; let b = 6; } console.log(a); // ...

  9. 20190817-T1-LOJ6322「雅礼国庆 2017 Day6」Star Way To Heaven

    写这篇题解是因为作者太蒻已经忘了最小生成树了. <题面> 这个题还真是想不到最小生成树. $80\%$算法 复杂度:$\Theta(k^2 \log N )$ 用了二分答案(明显答案具有单 ...

  10. Java问题解读系列之IO相关---Java深拷贝和浅拷贝

    前几天和棒棒童鞋讨论Java(TA学的是C++)的时候,他提到一个浅拷贝和深拷贝的问题,当时的我一脸懵圈,感觉自己学Java居然不知道这个知识点,于是今天研究了一番Java中的浅拷贝和深拷贝,下面来做 ...