irpas技术客

C# 图片操作(图片读取,保存,转换,传输)_无熵~_c# 读取图片

大大的周 2898

?JPG PNG GIF BMP图片格式的区别:

类型优点缺点应用场景相同图片大小比较BMP无损压缩,图质最好文件太大,不利于网络传输152KGIF动画存储格式最多256色,画质差53KPNG可保存透明背景的图片画质中等202KJPG文件小,利于网络传输画质损失车牌识别84K

?图片代码操作:

?根据图片的相对路径 获取Image对象:

/// <summary> /// 根据图片的相对路径 获取Image对象 /// </summary> /// <param name="imgPath">图片的相对路径(如:@"/images/star.png")</param> /// <returns></returns> public static Image GetImage(string imgPath) { if (File.Exists(imgPath)) { Image im = new Image(); im.Source = GetBitmapImage(imgPath); return im; } else return null; }

?根据图片的相对路径 返回 BitmapImage对象的实例化:

/// <summary> /// 根据图片的相对路径 返回 BitmapImage对象的实例化 /// </summary> /// <param name="imgPath">图片的相对路径(如:@"/images/star.png")</param> /// <returns></returns> public static BitmapImage GetBitmapImage(string imgPath) { try { if (!imgPath.StartsWith("/")) { imgPath = "/" + imgPath; } return new BitmapImage(new Uri("Pack://application:,,," + imgPath)); } catch { return null; } }

?根据图片的相对路径 获取ImageBrush对象:

/// <summary> /// 根据图片的相对路径 获取ImageBrush对象 (此对象资源可以直接用于绑定控件的Background属性) /// </summary> /// <param name="imgPath">图片的相对路径(如:@"/images/star.png")</param> /// <returns></returns> public static ImageBrush GetImageBrush(string imgPath) { if (File.Exists(imgPath)) { ImageBrush ib = new ImageBrush(); ib.ImageSource = GetBitmapImage(imgPath); return ib; } else return null; }

在Path中读取图片byte[]:

/// <summary> /// 根据图片的路径解析成图片资源 /// </summary> /// <param name="filePath"></param> /// <returns></returns> public static byte[] BitmapImageToByteArray(String filePath) { byte[] byteArray = null ; if(File.Exists(filePath)) byteArray = File.ReadAllBytes(filePath); return byteArray; }

byte[]转BitmapImage:

/// <summary> /// 解析字节数组成图片 /// </summary> /// <param name="byteArray"></param> /// <returns></returns> public static BitmapImage ByteArrayToBitmapImage(byte[] byteArray) { BitmapImage bmp = null; try { bmp = new BitmapImage(); bmp.BeginInit(); bmp.StreamSource = new MemoryStream(byteArray); bmp.EndInit(); } catch { bmp = null; } return bmp; }

BitmapImage转byte[]:

/// <summary> /// 图片数据解析成字节流数组(用于存储到数据库) /// </summary> /// <param name="bmp"></param> /// <returns></returns> public static byte[] BitmapImageToByteArray(BitmapImage bmp) { byte[] byteArray = null; try { Stream sMarket = bmp.StreamSource; if (sMarket != null && sMarket.Length > 0) { sMarket.Position = 0; using (BinaryReader br = new BinaryReader(sMarket)) { byteArray = br.ReadBytes((int)sMarket.Length); } } } catch { } return byteArray; }

将Bitmap对象转换成bitmapImage对象:

/// <summary> /// 将Bitmap对象转换成bitmapImage对象 /// </summary> /// <param name="bitmap"></param> /// <returns></returns> public BitmapImage ConvertBitmapToBitmapImage(Bitmap bitmap) { MemoryStream stream = new MemoryStream(); bitmap.Save(stream, ImageFormat.Bmp); BitmapImage image = new BitmapImage(); image.BeginInit(); image.StreamSource = stream; image.EndInit(); return image; }

将bitmapImage对象转换成Bitmap对象:

/// <summary> /// 将bitmapImage对象转换成Bitmap对象 /// </summary> /// <param name="bitmapImage"></param> /// <returns></returns> public static System.Drawing.Bitmap BitmapImageToBitmap(BitmapImage bitmapImage) { using (System.IO.MemoryStream outStream = new System.IO.MemoryStream()) { BitmapEncoder enc = new BmpBitmapEncoder(); enc.Frames.Add(BitmapFrame.Create(bitmapImage)); enc.Save(outStream); System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(outStream); return bitmap; } }

bitmap转换成ImageSource:

[DllImport("gdi32.dll", SetLastError = true)] private static extern bool DeleteObject(IntPtr hObject); /// <summary> /// 从bitmap转换成ImageSource /// </summary> /// <param name="icon"></param> /// <returns></returns> public static ImageSource ChangeBitmapToImageSource(Bitmap bitmap) { IntPtr hBitmap = bitmap.GetHbitmap(); ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); if (!DeleteObject(hBitmap))//记得要进行内存释放。否则会有内存不足的报错。 { throw new System.ComponentModel.Win32Exception(); } return wpfBitmap; }

从Bitmap转换成BitmapSource:

/// <summary> /// 从Bitmap转换成BitmapSource /// </summary> /// <param name="bmp"></param> /// <returns></returns> public static BitmapSource ChangeBitmapToBitmapSource(Bitmap bmp) { BitmapSource returnSource; try { returnSource = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); } catch { returnSource = null; } return returnSource; }

?从Icon到ImageSource的转换:

/// <summary> /// 从Icon到ImageSource的转换 /// </summary> public ImageSource ChangeIconToImageSource(Icon icon) { ImageSource imageSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon( icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); return imageSource; }

Stream保存图片:

FileStream fs = new FileStream("A.jpg", FileMode.Create, FileAccess.ReadWrite); Stream MyStream = new MemoryStream((byte[])imageBytes); //取出的byte[]数组 int read = 0; byte[] Mybyte = new byte[1024]; do { read = MyStream.Read(Mybyte,0,1024); fs.Write(Mybyte,0,read); } while (read > 0); MyStream.Flush(); MyStream.Close(); fs.Flush(); fs.Close();

图片通过CGI获取保存到本地快照:

public string Address = "url address"; public void SavefromWeb() { FileStream fs = new FileStream("D:\\Image.jpg",FileMode.Create,FileAccess.ReadWrite); HttpWebRequest MyHttpWebRequest = null; HttpWebResponse MyHttpWebResponse = null; Stream MyStream = null; try { MyHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(Address); MyHttpWebResponse = (HttpWebResponse)MyHttpWebRequest.GetResponse(); MyStream = MyHttpWebResponse.GetResponseStream(); } catch(Exception) { } int read = 0; byte[] Mybyte=new byte[1024]; do { read = MyStream.Read(Mybyte,0,1024); fs.Write(Mybyte,0,read); }while(read>0); MyStream.Flush(); MyStream.Close(); MyHttpWebResponse.Close(); fs.Flush(); fs.Close(); }

参考:wpf 图片操作类 ImageBrush BitmapImage - ﹎蓝言觅ぷ雨 - 博客园

WPF(1)---图片的获取与存储 - Probably - 博客园

JPG PNG GIF BMP图片格式的区别_Wanda && Aidem -CSDN博客_bmp jpg png 区别


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #C #读取图片 #wpf #PNG #Gif #BMP图片格式的区别