一:Stream和Byte的含义

Stream:流,一般指文件流,内存流,可读的流和可写的流等,是一种数据转换的格式,流在计算机里可以表示为流输入或输出的一个连续的字节序列,它在使用完后,需要把资源释放。

Byte[]:字节数组,字节是通过网络传输信息的单位。在ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。当一个字符通过网络从一端发到别一端时,会将它转换成字节数组,需要再发送。文件上传时的Stream和byte[],有地我们需要进行转换,这里总结了两个方法
public byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, , bytes.Length);
stream.Seek(, 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 -) 之间的值由从当前源中读取的字节替换。
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;
()将图片转成流,流的方式生成图片
//第一中方法,先转成流
FileStream file=new FileStream(filepath,FileMode.Open);
//创建一个file.length大小的数组控件
byte[] bt= new byte[file.Length];
file.Read(bt, , 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";
()转成位图进行存储 Bitmap bi=new Bitmap(filepath);
var imgPath = "../../IMG/2015.png";
bi.Save(imgPath);
()先转成流,在使用位图进行读取 FileStream file = new FileStream(filepath, FileMode.Open);
//创建一个file.length大小的数组控件
byte[] bt = new byte[file.Length];
file.Read(bt, , bt.Length);
file.Close();
//把流转换成内存流
MemoryStream ms=new MemoryStream(bt);
Bitmap bi = new Bitmap(ms);
var imgPath = "../../IMG/2016.png";
bi.Save(imgPath,ImageFormat.Png);

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

IO流操作-图片操作(二)的更多相关文章

  1. java IO流读取图片供前台显示

    最近项目中需要用到IO流来读取图片以提供前台页面展示,由于以前一直是用url路径的方式进行图片展示,一听说要项目要用IO流读取图片感觉好复杂一样,但任务下达下来了,做为程序员只有选择去执行喽,于是找了 ...

  2. Java 持久化之 --io流与序列化操作

    1)File类操作文件的属性 1.File类的常用方法 1. 文件的绝对完整路径:getAbsolutePath() 文件名:getName() 文件相对路径:getPath() 文件的上一级目录:g ...

  3. Java 学习笔记 IO流与File操作

    可能你只想简单的使用,暂时不想了解太多的知识,那么请看这里,了解一下如何读文件,写文件 读文件示例代码 File file = new File("D:\\test\\t.txt" ...

  4. java IO流 对文件操作的代码集合

    Io流 按照分类 有两种分类 流向方向: 有输入流和输出流 按照操作类型有:字节流和字符流 按照流向方向 字节流的一些操作 //读文件 FileInputStream fis = new FileIn ...

  5. Java IO流详解(二)——File类

    在上一章博客中简单的介绍了Java IO流的一些特征.也就是对文件的输入输出,既然至始至终都离不开文件,所以Java IO流的使用得从File这个类讲起. File类的描述:File类是文件和目录路径 ...

  6. java IO流复制图片

    一.使用字节流复制图片 //字节流方法 public static void copyFile()throws IOException { //1.获取目标路径 //(1)可以通过字符串 // Str ...

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

    制作解析网址的get def gethtml(url,postdata): header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; ...

  8. java IO流 Zip文件操作

    一.简介 压缩流操作主要的三个类 ZipOutputStream.ZipFile.ZipInputStream ,经常可以看到各种压缩文件:zip.jar.GZ格式的压缩文件 二.ZipEntry   ...

  9. java io流 对文件操作

    检查文件是否存在 获取文件路径 获取文件大小 ...... 更多参考手册 //对文件的操作 //检查文件是否存在 //获取文件路径 //获取文件大小 //文件是否可读 //文件是否可写 //.... ...

随机推荐

  1. CSS中zoom和scale的区别

    zoom和scale这两个东西都是用于对元素的缩放,但两者除了兼容性之外还有一些不同的地方.zoom缩放会将元素保持在左上角,而scale默认是中间位置,可以通过transform-origin来设置 ...

  2. Java学习笔记---继承和super的用法

    自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继 ...

  3. JQuery一句话实现全选/反选

    $("#checkAll").click(function () { if (this.checked) {     $("input[name='checkbox']& ...

  4. ASP.NET仿新浪微博下拉加载更多数据瀑布流效果

    闲来无事,琢磨着写点东西.貌似页面下拉加载数据,瀑布流的效果很火,各个网站都能见到各式各样的展示效果,原理大同小异.于是乎,决定自己写一写这个效果,希望能给比我还菜的菜鸟们一点参考价值. 在开始之前, ...

  5. Csharp递归和循环实现折半查找

    static bool whilehalf(int n) { ; //低位 ; //高位 ; while(low <= hight) { if(n> arr[c]) { low = c + ...

  6. javascript限制input只允许输入数字

    在做数据提交的表单时,经常要对input输入内容的类型进行限制,譬如javascript限制input只允许输入数字,最好的方法当然是使用javascript,因为它不用与服务器交互,大大减轻了服务器 ...

  7. leetcode Divide Two Integers python

    class Solution(object): def divide(self, dividend, divisor): """ :type dividend: int ...

  8. 字节数转换为b,kb,mb,gb的方法 通用的手机流量计算方法

    //通用的手机流量计算方法 private String byteToMB(long size){ long kb = 1024; long mb = kb*1024; long gb = mb*10 ...

  9. Orchard 源码探索(Localization)之国际化与本地化

    本地化与国际化 基本上相关代码都在在Orchard.Framework.Localization中. T("english")是如何调用到WebViewPage.cs中的Local ...

  10. 在Windows平台下安装与配置Memcached的方法分享

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.Memcached ...