using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
namespace InfoPublish.Model.Tools
{
/// <summary>
/// 工具类:二进制与byte数组互相转换
/// </summary>
public class ByteConvertHelper
{
/// <summary>
/// 将对象转换为byte数组
/// </summary>
/// <param name="obj">被转换对象</param>
/// <returns>转换后byte数组</returns>
public static byte[] Object2Bytes(object obj)
{
byte[] buff;
using (MemoryStream ms = new MemoryStream())
{
IFormatter iFormatter = new BinaryFormatter();
iFormatter.Serialize(ms, obj);
buff = ms.GetBuffer();
}
return buff;
}
/// <summary>
/// 将byte数组转换成对象
/// </summary>
/// <param name="buff">被转换byte数组</param>
/// <returns>转换完成后的对象</returns>
public static object Bytes2Object(byte[] buff)
{
object obj;
using (MemoryStream ms = new MemoryStream(buff))
{
IFormatter iFormatter = new BinaryFormatter();
obj = iFormatter.Deserialize(ms);
}
return obj;
}
/// <summary>
/// 从byte数组创建Image
/// </summary>
public static Image Bytes2Image(byte[] bytes)
{
System.IO.MemoryStream stream = new System.IO.MemoryStream();
stream.Write(bytes, 0, bytes.Length);
Image image = Image.FromStream(stream);
return image;
}
/// <summary>
/// 将Image转化为byte数组,使用缓存文件中转
/// </summary>
public static byte[] Image2Bytes_tmpFile(Image image, ImageFormat imageFormat = null)
{
if (imageFormat == null) imageFormat = ImageFormat.Jpeg;
String tmpFilePath = AppDomain.CurrentDomain.BaseDirectory + DateTime.Now.Ticks + ".stream";
image.Save(tmpFilePath, imageFormat); // 保存图像到文件
byte[] bytes = FileBinaryConvertHelper.File2Bytes(tmpFilePath); // 从文件中获取字节数组
if (File.Exists(tmpFilePath)) File.Delete(tmpFilePath); //删除文件
return bytes;
}
//private static System.Windows.Controls.Image Bitmap2Image(System.Drawing.Bitmap Bi)
//{
// MemoryStream ms = new MemoryStream();
// Bi.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
// BitmapImage bImage = new BitmapImage();
// bImage.BeginInit();
// bImage.StreamSource = new MemoryStream(ms.ToArray());
// bImage.EndInit();
// ms.Dispose();
// Bi.Dispose();
// System.Windows.Controls.Image i = new System.Windows.Controls.Image();
// i.Source = bImage;
// return i;
//}
//byte[] 转换 Bitmap
public static Bitmap BytesToBitmap(byte[] Bytes)
{
MemoryStream stream = null;
try
{
stream = new MemoryStream(Bytes);
return new Bitmap((Image)new Bitmap(stream));
}
catch (ArgumentNullException ex)
{
throw ex;
}
catch (ArgumentException ex)
{
throw ex;
}
finally
{
stream.Close();
}
}
//Bitmap转byte[]
public static byte[] BitmapToBytes(Bitmap Bitmap)
{
MemoryStream ms = null;
try
{
ms = new MemoryStream();
Bitmap.Save(ms, Bitmap.RawFormat);
byte[] byteImage = new Byte[ms.Length];
byteImage = ms.ToArray();
return byteImage;
}
catch (ArgumentNullException ex)
{
throw ex;
}
finally
{
ms.Close();
}
}
}
/// <summary>
/// 工具类:文件与二进制流间的转换
/// </summary>
public class FileBinaryConvertHelper
{
/// <summary>
/// 将文件转换为byte数组
/// </summary>
/// <param name="path">文件地址</param>
/// <returns>转换后的byte数组</returns>
public static byte[] File2Bytes(string path)
{
if (!File.Exists(path))
{
return new byte[0];
}
FileInfo fi = new FileInfo(path);
byte[] buff = new byte[fi.Length];
FileStream fs = fi.OpenRead();
fs.Read(buff, 0, Convert.ToInt32(fs.Length));
fs.Close();
return buff;
}
/// <summary>
/// 将byte数组转换为文件并保存到指定地址
/// </summary>
/// <param name="buff">byte数组</param>
/// <param name="savepath">保存地址</param>
public static void Bytes2File(byte[] buff, string savepath)
{
if (File.Exists(savepath))
{
File.Delete(savepath);
}
FileStream fs = new FileStream(savepath, FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(buff, 0, buff.Length);
bw.Close();
fs.Close();
}
}
}