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

