C# byte数组与Image的相互转换【转】
2024-10-15 02:11:24
功能需求:
1、把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库。
2、把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示。
3、从图片byte数组得到对应图片的格式,生成一张图片保存到磁盘上。
这里的Image是System.Drawing.Image。
//Get an image from file
Image image = Image.FromFile("D:\\test.jpg");
Bitmap bitmap = new Bitmap("D:\\test.jpg");
以下三个函数分别实现了上述三个需求:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text; namespace NetUtilityLib
{
public static class ImageHelper
{
/// <summary>
/// Convert Image to Byte[]
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
public static byte[] ImageToBytes(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;
}
} /// <summary>
/// Convert Byte[] to Image
/// </summary>
/// <param name="buffer"></param>
/// <returns></returns>
public static Image BytesToImage(byte[] buffer)
{
MemoryStream ms = new MemoryStream(buffer);
Image image = System.Drawing.Image.FromStream(ms);
return image;
} /// <summary>
/// Convert Byte[] to a picture and Store it in file
/// </summary>
/// <param name="fileName"></param>
/// <param name="buffer"></param>
/// <returns></returns>
public static string CreateImageFromBytes(string fileName, byte[] buffer)
{
string file = fileName;
Image image = BytesToImage(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";
}
System.IO.FileInfo info = new System.IO.FileInfo(file);
System.IO.Directory.CreateDirectory(info.Directory.FullName);
File.WriteAllBytes(file, buffer);
return file;
}
}
}
最新文章
- [转]学习Nop中Routes的使用
- noip模拟赛(一)魔法树
- C#中导入Win32 API函数
- (原创)Activity启动模式之singleTask
- lettuce webdriver 自动化测试---玩转BDD
- Git代码管理心得
- C#事物执行数据
- codeforces 580C Kefa and Park(DFS)
- 《一课经济学》书摘笔记I
- 解决Eclipse10配置Pydev不成功的问题
- UVA 524
- BBC 生命大设计
- 复合文档的二进制存储格式研究[ole存储结构](word,xls,ppt...)[转]
- POJ1258 基础最小生成树
- 用vue开发一个app(2,main.js)
- 【转】python qt(pyqt)的文件打开、文件保存、文件夹选择对话框
- Hunspell介绍及试用
- Exp2 后门原理与实践 20165110
- 莫烦scikit-learn学习自修第五天【训练模型的属性】
- Docker Registry V2 Garbage Collection
热门文章
- 学习windows编程 day4 之 盯裆猫
- Kafka 0.10 DelayedTaskQueue的用法和实现
- fffmgg
- .Net进阶系列(13)-异步多线程(Task和Parallel)(被替换)
- Spring Boot 启动过程及 自定义 Listener等组件
- 数据库的一致性读,赃读,多线程与赃读,ACID,UNDO
- luogu P4744 [Wind Festival]Iron Man
- POJ3177 Redundant Paths【双连通分量】
- Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
- PhoneUtil