一:Stream和Byte的含义

Stream:流,一般指文件流,内存流,可读的流和可写的流等,是一种数据转换的格式,流在计算机里可以表示为流输入或输出的一个连续的字节序列,它在使用完后,需要把资源释放。Byte[]:字节数组,字节是通过网络传输信息的单位。在ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。当一个字符通过网络从一端发到别一端时,会将它转换成字节数组,需要再发送。文件上传时的Stream和byte[],有地我们需要进行转换,这里总结了两个方法

public byte[] StreamToBytes(Stream stream)
{byte[] bytes = new byte[stream.Length];stream.Read(bytes, 0, bytes.Length);stream.Seek(0, SeekOrigin.Begin);return bytes;
}public Stream BytesToStream(byte[] bytes)
{Stream stream = new MemoryStream(bytes);return stream;
}

第一句话 byte[] bytes = new byte[stream.Length]; 主要就是声明一个数组

第二句话  Stream.Read 

public abstract int Read(byte[] buffer, int offset, int count)参数:
buffer: 字节数组。此方法返回时,该缓冲区包含指定的字符数组,该数组的 offset 和 (offset + count -1) 之间的值由从当前源中读取的字节替换。
offset: buffer 中的从零开始的字节偏移量,从此处开始存储从当前流中读取的数据【告诉我们从流中哪个位置(偏移量)开始读取】。
count: 要从当前流中最多读取的字节数【就是读取多少字节数】。

  返回值

读入缓冲区中的总字节数。如果当前可用的字节数没有请求的字节数那么多,则总字节数可能小于请求的字节数,或者如果已到达流的末尾,则为零 (0)。

  备注

此方法的实现从当前流中读取最多的 count 个字节,并将它们存储在从 offset 开始的 buffer 中。流中的当前位置提升已读取的字节数;但是,如果出现异常,流中的当前位置保持不变。实现返回已读取的字节数。仅当位置当前位于流的末    尾时,返回值才为零。如果没有任何可用的数据,该实现将一直阻塞到至少有一个字节的数据可读为止。仅当流中不再有其他的数据,而且也不再需要更多的数据(如已关闭的套接字或文件尾)时,Read 才返回 0。即使尚未到达流的末尾,实现    仍可以随意返回少于所请求的字节。

 

第三句话 abstract long Seek(long offset, SeekOrigin origin)

1.SeekOrigin这个枚举的解释   Begin :指定流的开头   Current:指定流的当前位置   Eed:指定流的结尾

2.Offset如果 offset 为负,则要求新位置位于 origin 指定的位置之前,其间隔相差 offset 指定的字节数。

如果 offset 为零 (0),则要求新位置位于由 origin 指定的位置处。

如果 offset 为正,则要求新位置位于 origin 指定的位置之后,其间隔相差 offset 指定的字节数。

Stream. Seek(-3,Origin.End); 表示在流末端往前数第3个位置

Stream. Seek(0,Origin.Begin); 表示在流的开头位置

Stream. Seek(3,Orig`in.Current); 表示在流的当前位置往后数第三个位置

一,选取一张图片var open = new OpenFileDialog();open.Filter = "图片|*.jpg";open.ShowDialog();var filepath = open.FileName;
(1)将图片转成流,流的方式生成图片
//第一中方法,先转成流FileStream file=new FileStream(filepath,FileMode.Open);//创建一个file.length大小的数组控件byte[] bt= new byte[file.Length];file.Read(bt, 0, bt.Length);file.Close();//创建内存流MemoryStream mstream=new MemoryStream(bt);System.Drawing.Image image = System.Drawing.Image.FromStream(mstream);var imgPath = "../../IMG/2015.png";image.Save(imgPath, ImageFormat.Png);
(二)直接读取System.Drawing.Image image = System.Drawing.Image.FromFile(filepath);var imgPath = "../../IMG/2015.png";
(3)转成位图进行存储Bitmap bi=new Bitmap(filepath);var imgPath = "../../IMG/2015.png";bi.Save(imgPath);
(4)先转成流,在使用位图进行读取FileStream file = new FileStream(filepath, FileMode.Open);//创建一个file.length大小的数组控件byte[] bt = new byte[file.Length];file.Read(bt, 0, bt.Length);file.Close();//把流转换成内存流MemoryStream ms=new MemoryStream(bt);Bitmap bi = new Bitmap(ms);var imgPath = "../../IMG/2016.png";bi.Save(imgPath,ImageFormat.Png);

主要文章来源 逆时针の风 & 仓储大叔

转载于:https://www.cnblogs.com/xiaoyaodijun/p/4516745.html

IO流操作-图片操作(二)相关推荐

  1. C# IO流读写文件操作

    C# IO流读写文件操作 1.创建文件流 2.创建文件读写器 3.执行读写操作 4.关闭文件读写器和文件流 1.创建文件流 string filePath = AppDomain.CurrentDom ...

  2. java io流操作_十个Demo进行讲解Java中IO流的常用操作~

    好久不见的IO流 对IO流的学习,我记得还是初学Java基础的时候,后来找工作过程中经常看到有些招聘信息中写到熟悉IO流,现在想想IO流,真的是一脸懵逼,不说这么多废话了,IO流这次好好整理一下. 说 ...

  3. Java io流的使用操作

    了解io流 什么是io流 io流即输入输出流 通过对象向我的文件里放入取出 创建文件对象 放入绝对路径C:\a.txt 创建时需要购入后缀如txt ppt avi 对象名.delete()删除文件 对 ...

  4. java第九章IO流与文件操作

    使用输出流将String保存到文件(byte数组)byte[] bytes = "Java数据交流管道--IO流".getBytes(); 使用Filewriter 文章目录 9- ...

  5. 【Java基础】IO流与文件操作的一些手写代码面试题

    概述 代码 概述 IO流是我们最基础的数据操作,最近我身边的一些朋友经常遇到这样的面试题,有的居然还是手写代码,真的太残酷了:不过话说回来,IO流确实是编程里最最基础的操作了,需要我们好好掌握,熟记于 ...

  6. java基础—IO流——字节流的操作演示

    字节流的操作演示 1.将一个文本通过字符流操作复制到指定目录下 2.将一个文本通过字节流操作复制到指定目录下 3.将一个Mp3文件通过字节流操作方式复制到指定目录下,并加入缓冲技术 4.简写复制Mp3 ...

  7. java Io流实现图片复制

    1.java.io中提供了很多流类,在这里我们要用的是FileInputStream/FileOutputStream----用于读取原始字节 2.首先我们把一张图片拷贝放到当前目录下例如:" ...

  8. python 异步下载图片_python3抓取异步百度瀑布流动态图片(二)get、json下载代码讲解...

    制作解析网址的get 1 defgethtml(url,postdata):2 3 header = {'User-Agent':4 'Mozilla/5.0 (Windows NT 10.0; WO ...

  9. java(File、IO流)

    IO流 一.IO流和File类 二 .File类 绝对路径和相对路径 file的成员方法 file的创建方法 file的删除方法 file的判断和获取功能 高级获取方法listFiles() file ...

最新文章

  1. 链接3: SQL语句教程
  2. Hibernate查询语言
  3. leetcode 721. Accounts Merge | 721. 账户合并(HashMap版并查集)
  4. opencv 4快速入门_基于OpenCV的图像融合
  5. Spring MVC Hibernate MySQL集成CRUD示例教程
  6. CSS / CSS3(新增)选择器及优先级原则
  7. 数据绑定表达式语法(Eval,Bind区别)
  8. DevExpress.XtraTreeList.TreeList的DataSource属性使用注意事项.
  9. 是因为Session只能让服务器在一次连续的会话中记住你,而Cookie是记住浏览器一段时间...
  10. ActiveRecord 复合主键时 实体转换为DataRow
  11. 时间linux防火墙策略,Linux防火墙简介 – iptables配置策略(示例代码)
  12. steam一键授权工具_Sam Haynor的100个STEAM项目
  13. 医疗相关计算机系统,智能医疗信息管理系统
  14. 微信小程序获取Appsecret报错40125“invalid appsecret”
  15. ps随意改变图层形态
  16. matlab怎么表示循环求和,matlab循环求和
  17. vue 接入天地图并且在地图上画基站扇形覆盖物
  18. python爬取豆瓣读书简单_Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
  19. 每日一题-1619. 删除某些元素后的数组均值
  20. POJ1201/ZOJ1508/HDU1384 Intervals(spfa解差分约束问题)

热门文章

  1. idea工程本地依赖_IDEA最新版2020.1的maven工程本地依赖仓库无法使用问题(已解决)...
  2. python安装linux软件_Linux之安装常用软件
  3. python中utf-8是什么意思_python中Unicode和UTF-8的区别
  4. mysql的基本介绍简书_mysql 简介
  5. 如何将zipoutputstream返回_性能问题|如何正确使用“缓存”?
  6. Linux下Nginx编译安装过程详解
  7. Spark详解(五):Spark作业执行原理
  8. android 点击edittext全选,Android - 阻止edittext复制/粘贴,然后双击全选
  9. windows系统下安装JDK8的教程图解
  10. C语言 · 贪心算法