日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IO流操作-图片操作(二)

發布時間:2025/4/16 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IO流操作-图片操作(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一: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

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的IO流操作-图片操作(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。