C# byte陣列與Image相互轉換的方法
功能需求:
1、把一張圖片(png bmp jpeg bmp gif)轉換為byte陣列存放到資料庫。
2、把從資料庫讀取的byte陣列轉換為Image物件,賦值給相應的控制元件顯示。
3、從圖片byte陣列得到對應圖片的格式,生成一張圖片儲存到磁碟上。
這裡的Image是System.Drawing.Image。
以下三個函式分別實現了上述三個需求:
// Convert Image to Byte[]
private byte[] ImageToByte(Image image)
{
ImageFormat format = image.RawFormat;
using (MemoryStream ms = new MemoryStream())
{
if (format.Equals(ImageFormat.Jpeg))
{
image.Save(ms, ImageFormat.Jpeg);
}
else if (format.Equals(ImageFormat.Png))
{
image.Save(ms, ImageFormat.Png);
}
else if (format.Equals(ImageFormat.Bmp))
{
image.Save(ms, ImageFormat.Bmp);
}
else if (format.Equals(ImageFormat.Gif))
{
image.Save(ms, ImageFormat.Gif);
}
else if (format.Equals(ImageFormat.Icon))
{
image.Save(ms, ImageFormat.Icon);
}
byte[] buffer = new byte[ms.Length];
//Image.Save()會改變MemoryStream的Position,需要重新Seek到Begin
ms.Seek(0, SeekOrigin.Begin);
ms.Read(buffer, 0, buffer.Length);
return buffer;
}
}
// Convert Byte[] to Image
private Image ByteToImage(byte[] buffer)
{
MemoryStream ms = new MemoryStream(buffer);
Image image = System.Drawing.Image.FromStream(ms);
return image;
}
// Convert Byte[] to a picture
private string CreateImageFromByte(string fileName, byte[] buffer)
{
string file = fileName; //檔名(不包含副檔名)
Image image = ByteToImage(buffer);
ImageFormat format = image.RawFormat;
if (format.Equals(ImageFormat.Jpeg))
{
file += ".jpeg";
}
else if (format.Equals(ImageFormat.Png))
{
file += ".png";
}
else if (format.Equals(ImageFormat.Bmp))
{
file += ".bmp";
}
else if (format.Equals(ImageFormat.Gif))
{
file += ".gif";
}
else if (format.Equals(ImageFormat.Icon))
{
file += ".icon";
}
//檔案路徑目錄必須存在,否則先用Directory建立目錄
File.WriteAllBytes(file, buffer);
return file;
}
相關文章
- 陣列與字串方法與相互轉換陣列字串
- 轉 IOS---NSdata 與 NSString,Byte陣列,UIImage 的相互轉換iOS陣列UI
- 轉:java中陣列與List相互轉換的方法Java陣列
- android byte[]陣列,bitmap,drawable之間的相互轉換Android陣列
- 使用Java完成byte陣列與十六進位制字串相互轉換Java陣列字串
- xml與陣列的相互轉換——phpXML陣列PHP
- C# string byte陣列轉換解析C#陣列
- Golang 陣列和字串之間的相互轉換[]byte/stringGolang陣列字串
- C#:檔案、byte[]、Stream相互轉換C#
- string與char陣列相互轉換陣列
- 陣列和集合的相互轉換陣列
- 字串和陣列的相互轉換字串陣列
- JavaScript陣列與字串相互轉換 join、splitJavaScript陣列字串
- iOS字串和陣列的相互轉換iOS字串陣列
- C/C# float與byte/u8 陣列的轉化C#陣列
- Swift中實現Array陣列和NSArray陣列的相互轉換與遍歷Swift陣列
- javascript中字串和陣列的相互轉換JavaScript字串陣列
- C#位元組陣列byte[]和字串string如何互相轉換C#陣列字串
- 陣列與集合List的相互轉化陣列
- NSString, NSData和Byte的相互轉換
- C#位元組陣列與字串轉換C#陣列字串
- Java中 set,list,array(集合與陣列)、Map相互轉換Java陣列
- C#中byte[] 與string相互轉化問題C#
- 旋轉矩陣與尤拉角的相互轉換矩陣
- Java實現普通二維陣列和稀疏陣列的相互轉換Java陣列
- js實現的字串和陣列的相互轉換JS字串陣列
- byte陣列轉字串?陣列字串
- byte位元組陣列 轉換成double型別陣列型別
- js實現的陣列和CSV格式的相互轉換JS陣列
- 將byte[]陣列轉換為影像輸出到頁面陣列
- 31_Pandas.DataFrame,Series和NumPy陣列ndarray相互轉換陣列
- XML與DataSet的相互轉換XML
- float與byte[]互相轉換
- Java 集合與陣列互相轉換Java陣列
- UIImage與Iplimage相互轉換UI
- SDOM與QDOM相互轉換
- DataTable與List相互轉換
- Jquery 陣列與字串之間的轉換jQuery陣列字串