2018-12-27-WPF-从文件创建图片的方法
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-从文件创建图片的方法的更多相关文章
- 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写成本地地址+端口就可以 ...
- WPF获得PNG图片外观Path数据
原文:WPF获得PNG图片外观Path数据 WPF开发界面的时候,用的最多的就是自定义控件模板,开发人员需要根据UI的设计,做出符合要求的自定义控件.但是在一些特殊情况下,UI的设计可能 ...
- 2018.12.02 Socket编程之初识Socket
Socket编程主要分为TCP/UDP/SCTP三种,每一种都有各自的优点,所以会根据实际情况决定选用何种Socket,今天开始我将会逐步学习Socket编程,并将学习过程记录于此. 今天学习的是TC ...
- OPPO Developers Conference(2018.12.26)
时间:2018.12.26地点:北京国家会议中心
- Tencent Cloud Developers Conference(2018.12.15)
时间:2018.12.15地点:北京朝阳悠唐皇冠假日酒店
- 2018.12.1 Test
目录 2018.12.1 Test A 串string(思路) B 变量variable(最小割ISAP) C 取石子stone(思路 博弈) 考试代码 B C 2018.12.1 Test 题目为2 ...
- 12.27 cf div3 解题报告
12.27 cf div3 解题报告 wxy.wxy,带上分拉,全场做了个无脑小白 比赛场地 A: T1,跟着模拟就好了 B: sort一遍之后 去除的数一定是a[1]或者a[n] 比较去除谁小就输出 ...
- 「版本升级」MyEclipse CI 2018.12.0正式发布
新版本MyEclipse为WildFly 14新增一个新的服务器连接器,改进性能并新增一些Java 10修复程序.新版本为IDE做了几个核心修复,这是MyEclipse 2018一个更棒的升级. [M ...
- 微信小程序 - 接口更新记录以及解决方案(2018/12/26)
2018/8/17 - 背景音频需要在app.json添加requireBackGroundModes 2018/9/12 - 微信更改获取用户信息接口/获取位置等接口 - button 2018/1 ...
随机推荐
- Gym-102141E
https://vjudge.net/problem/Gym-102141E 用set乱搞 #include<iostream> #include<cstdio> #inclu ...
- Django项目:CRM(客户关系管理系统)--68--58PerfectCRM实现king_admin批量生成上课记录
# kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...
- JQuery--漂亮的三目运算与jQ选择器结合代码
$(function($) { $("input[name='timeset']").bind('click', function() { $(this).val() == 'cu ...
- 微信小程序注册使用流程
新开发微信小程序使用流程: 平时使用小程序较多,但是具体注册流程简单记录下: 第一步:通过邮箱注册 第二步:在邮箱进行激活 注册后,在邮箱会收到激活信息提示.点击激活地址进行激活. 第三步:信息登记 ...
- light oj 1084 线性dp
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...
- python实例5-表格打印
编写一个名为printTable()的函数,它接受字符串的列表的列表,将它显示在组织良好的表格中,每列右对齐.假定所有内层列表都包含同样数目的字符串.例如,该值可能看起来像这样: table_data ...
- 2019-8-31-HttpRepl-互操作的-RESTful-HTTP-服务调试命令行工具
title author date CreateTime categories HttpRepl 互操作的 RESTful HTTP 服务调试命令行工具 lindexi 2019-08-31 16:5 ...
- LOJ 6497 图
LOJ 6497 图 题意 有图\(n\)点,每点可为黑或白,其中一些点颜色已定. 初时图无边,于每对\(i<j\),可由\(i\)向\(j\)连有向边,或不连. 称黑白相间之路径为交错路径. ...
- shell 第一篇
1. 查看当前linux 支持的shell 类型 [root@nfs01 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash / ...
- 【python之路28】模块python与excel
一.可使用的第三方库 python中处理excel表格,常用的库有xlrd(读excel)表.xlwt(写excel)表.openpyxl(可读写excel表)等.xlrd读数据较大的excel表时效 ...