C#實現(xiàn)Bitmap類型與Byte[]類型相互轉化的示例詳解
前言
在C#編程中,Bitmap類型和Byte[]類型之間的相互轉化是圖像處理和數(shù)據(jù)傳輸中常見的需求。Bitmap類型表示一個位圖圖像,而Byte[]類型則是一個字節(jié)數(shù)組,可以用來存儲圖像數(shù)據(jù)。有時,我們需要將Bitmap類型轉換為Byte[]類型以便進行數(shù)據(jù)傳輸或存儲,而有時又需要將Byte[]類型轉換為Bitmap類型以在客戶端顯示圖像。本文將詳細介紹如何在這兩種類型之間進行相互轉化。
一、Bitmap類型轉Byte[]類型
使用Bitmap類的Save方法
Bitmap類的Save方法可以將圖像保存到文件,同時將文件內(nèi)容讀取到Byte[]數(shù)組中。以下是一個示例:
using System; using System.IO; using System.Drawing; namespace BitmapToByteArray { class Program { static void Main(string[] args) { // 創(chuàng)建一個Bitmap對象 Bitmap bitmap = new Bitmap("example.jpg"); // 將Bitmap對象保存到文件 using (FileStream fileStream = new FileStream("example.jpg", FileMode.OpenOrCreate)) { bitmap.Save(fileStream, System.Drawing.Imaging.ImageFormat.Jpeg); } // 讀取文件內(nèi)容到Byte[]數(shù)組 byte[] bytes = File.ReadAllBytes("example.jpg"); // 輸出Byte[]數(shù)組長度 Console.WriteLine("Byte[]數(shù)組長度:" + bytes.Length); // 釋放資源 bitmap.Dispose(); } } }
使用Bitmap類的GetBytes方法
Bitmap類沒有直接的方法將自身轉換為Byte[],但我們可以使用Bitmap類的GetBytes方法來獲取圖像的像素數(shù)據(jù),然后將其轉換為Byte[]數(shù)組。以下是一個示例:
using System; using System.Drawing; using System.IO; namespace BitmapToByteArray { class Program { static void Main(string[] args) { // 創(chuàng)建一個Bitmap對象 Bitmap bitmap = new Bitmap("example.jpg"); // 獲取圖像的像素數(shù)據(jù) BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat); // 計算Byte[]數(shù)組的大小 int bytesCount = bitmapData.Stride * bitmapData.Height; byte[] bytes = new byte[bytesCount]; // 將像素數(shù)據(jù)復制到Byte[]數(shù)組 System.Runtime.InteropServices.Marshal.Copy(bitmapData.Scan0, bytes, 0, bytesCount); // 釋放資源 bitmap.UnlockBits(bitmapData); // 輸出Byte[]數(shù)組長度 Console.WriteLine("Byte[]數(shù)組長度:" + bytes.Length); } } }
二、Byte[]類型轉Bitmap類型
使用MemoryStream將Byte[]數(shù)組轉換為Bitmap對象
通過MemoryStream,我們可以將Byte[]數(shù)組重新構造為Bitmap對象。以下是一個示例:
using System; using System.Drawing; using System.IO; namespace ByteArrayToBitmap { class Program { static void Main(string[] args) { // 讀取Byte[]數(shù)組 byte[] bytes = File.ReadAllBytes("example.jpg"); // 使用MemoryStream將Byte[]數(shù)組轉換為Bitmap對象 using (MemoryStream memoryStream = new MemoryStream(bytes)) { Bitmap bitmap = new Bitmap(memoryStream); // 輸出Bitmap對象的信息 Console.WriteLine("圖像寬度:" + bitmap.Width); Console.WriteLine("圖像高度:" + bitmap.Height); // 釋放資源 bitmap.Dispose(); } } } }
使用System.Drawing.Imaging.BitmapImage類
System.Drawing.Imaging.BitmapImage類提供了一種從Byte[]數(shù)組創(chuàng)建Bitmap對象的方法。以下是一個示例:
using System; using System.Drawing; using System.Drawing.Imaging; namespace ByteArrayToBitmap { class Program { static void Main(string[] args) { { // 讀取Byte[]數(shù)組 byte[] bytes = File.ReadAllBytes("example.jpg"); // 使用System.Drawing.Imaging.BitmapImage類創(chuàng)建Bitmap對象 Bitmap bitmap = new Bitmap(bytes); // 輸出Bitmap對象的信息 Console.WriteLine("圖像寬度:" + bitmap.Width); Console.WriteLine("圖像高度:" + bitmap.Height); // 釋放資源 bitmap.Dispose(); } } }
在這段代碼中,我們首先讀取了一個名為"example.jpg"的JPEG圖像文件的內(nèi)容,并將其存儲在Byte[]數(shù)組中。然后,我們使用Bitmap類構造函數(shù),將Byte[]數(shù)組作為參數(shù)傳遞,創(chuàng)建了一個新的Bitmap對象。最后,我們輸出了新創(chuàng)建的Bitmap對象的寬度和高度信息,并釋放了資源。
注意: 在上面的示例中,我們使用了File.ReadAllBytes方法來讀取文件內(nèi)容。如果你需要處理其他格式的圖像文件,你可能需要使用不同的方法來讀取文件內(nèi)容,例如使用System.IO.FileStream類。
總結
在C#中,Bitmap類型和Byte[]類型之間的相互轉化可以通過使用Save方法、GetBytes方法、MemoryStream和BitmapImage類來實現(xiàn)。這些方法可以滿足圖像處理中的常見需求,例如將圖像保存到文件、從文件讀取圖像內(nèi)容,或者在網(wǎng)絡傳輸中將圖像數(shù)據(jù)轉換為Byte[]數(shù)組。
以上就是C#實現(xiàn)Bitmap類型與Byte[]類型相互轉化的示例詳解的詳細內(nèi)容,更多關于C# Bitmap與Byte[]相互轉化的資料請關注腳本之家其它相關文章!
相關文章
asp.net實現(xiàn)遍歷Request的信息操作示例
這篇文章主要介紹了asp.net實現(xiàn)遍歷Request的信息操作,涉及asp.net針對請求信息相關操作打印操作技巧,需要的朋友可以參考下2020-03-03C#中實現(xiàn)向數(shù)組中動態(tài)添加元素
這篇文章主要介紹了C#中實現(xiàn)向數(shù)組中動態(tài)添加元素方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06WPF仿Tabcontrol實現(xiàn)切換多個不同View
這篇文章主要為大家詳細介紹了WPF如何模仿Tabcontrol實現(xiàn)切換多個不同View,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-11-11