1.C# WinForm中,图片与字节的互转
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("图片所在路径(只需要到文件夹不需要到具体图片文件)");
System.IO.FileInfo[] files = dir.GetFiles();
foreach (System.IO.FileInfo item in files)
{
if (item.Name.EndsWith("png"))
{
System.IO.FileStream fs = item.Open(System.IO.FileMode.Open);
//用一个字节数组将读取的图片流保存,然后关闭流解锁文件避免下次读取文件(程序未关闭)时报错
byte[] imgByte = new byte[fs.Length];
fs.Read(imgByte, 0, imgByte.Length);
fs.Close();
Image im = Bitmap.FromStream(new System.IO.MemoryStream(imgByte));//将流转为图片
System.IO.MemoryStream ms = new System.IO.MemoryStream();
im.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
//将流转成字节
byte[] bytes = new byte[ms.Length];
//Image.Save()会改变MemoryStream的Position,需要重新Seek到Begin
ms.Seek(0, System.IO.SeekOrigin.Begin);
ms.Read(bytes, 0, bytes.Length);
System.IO.Stream ms1 = new System.IO.MemoryStream(bytes);
System.Drawing.Image imm = System.Drawing.Image.FromStream(ms1);
imm.Save(@"保存路径\图片名");
}
}
2.WPF中字节转为图片,并赋值给Image控件
//获取图片的字节
byte[] image_byte = (byte[])dr["IMAGE_BYTE"];
BitmapImage bitImage = new BitmapImage();
//BitmapImage需要进行初始化,否则像Height、Width等属性会引发异常
bitImage.BeginInit();//开始初始化
bitImage.StreamSource = new MemoryStream(image_byte);
bitImage.EndInit();//结束初始化
Image i = new Image();
i.Source = bitImage;
//设置图片的Margin
Thickness tk = new Thickness(Convert.ToDouble(position_x), Convert.ToDouble(position_y), 0, 0);
i.Margin = tk;
w.Canvas1.Children.Add(i);
Panel.SetZIndex(i, 11);//设置元素的显示顺序(层级)数值越大,层级越高;显示优先级:高层级>低层级