C# Bitmap 转为位图、 ImageSource 转为Bitmap、Bitmap 转 BitmapImage、BitmapImage 转为byte[]、图片压缩
#region Bitmap 转为位图 /// <summary> /// Bitmap 转为位图 /// </summary> /// <param name="bitmap">Bitmap 对象</param> /// <returns>ImageSource 位图对象</returns> public static ImageSource BitmapToImageSource(System.Drawing.Bitmap bitmap) { try { IntPtr intPtr = bitmap.GetHbitmap(); ImageSource imageSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(intPtr,IntPtr.Zero,Int32Rect.Empty,BitmapSizeOptions.FromEmptyOptions()); return imageSource; } catch (Exception ex) { WriteLog.WriteErrorInfo(ex); } return null; } #endregion
#region ImageSource 转为Bitmap /// <summary> /// ImageSource 转为Bitmap /// </summary> /// <param name="imageSource">imageSource 对象</param> /// <returns>返回 Bitmap 对象</returns> public static System.Drawing.Bitmap ImageSourceToBitmap(ImageSource imageSource) { try { BitmapSource bitmapSource = (BitmapSource)imageSource; System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(bitmapSource.PixelWidth, bitmapSource.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); System.Drawing.Imaging.BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(System.Drawing.Point.Empty, bitmap.Size),System.Drawing.Imaging.ImageLockMode.WriteOnly,System.Drawing.Imaging.PixelFormat.Format32bppArgb); bitmapSource.CopyPixels(Int32Rect.Empty,data.Scan0,data.Height*data.Stride,data.Stride); bitmap.UnlockBits(data); return bitmap; } catch (Exception ex) { WriteLog.WriteErrorInfo(ex); } return null; } #endregion
#region Bitmap 转 BitmapImage /// <summary> /// Bitmap 转 BitmapImage /// </summary> /// <param name="bitmap">Bitmap 对象</param> /// <returns>转换后的 BitmapImage对象</returns> public static BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap) { try { BitmapImage relust = new BitmapImage(); using (MemoryStream memoryStream=new MemoryStream()) { MemoryStream memory = new MemoryStream(); bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png); memoryStream.Position = 0; relust.BeginInit(); relust.CacheOption = BitmapCacheOption.OnLoad; memoryStream.CopyTo(memory); relust.StreamSource = memory; relust.EndInit(); relust.Freeze(); return relust; } } catch (Exception ex) { WriteLog.WriteErrorInfo(ex); } return null; } #endregion
#region BitmapImage 转为byte[] /// <summary> /// BitmapImage 转为byte[] /// </summary> /// <param name="bitmapImage">BitmapImage 对象</param> /// <returns>byte[] 数组</returns> public static byte[] BitmapImageToByteArray(BitmapImage bitmapImage) { byte[] buffer = new byte[] { }; try { Stream stream = bitmapImage.StreamSource; if (stream!=null&& stream.Length>0) { stream.Position = 0; using (BinaryReader binary=new BinaryReader(stream)) { buffer = binary.ReadBytes((int)stream.Length); } } } catch (Exception ex) { WriteLog.WriteErrorInfo(ex); } return buffer; } #endregion
#region 图片压缩 /// <summary> /// 图片压缩 /// </summary> /// <param name="bitmap">要压缩的源图像</param> /// <param name="height">要求的高</param> /// <param name="width">要求的宽</param> /// <returns></returns> public static System.Drawing.Bitmap GetPicThumbnail(System.Drawing.Bitmap bitmap , int height, int width) { try { lock (bitmap) { System.Drawing.Bitmap iSource = bitmap; System.Drawing.Imaging.ImageFormat imageFormat = iSource.RawFormat; int sw = width, sh = height; //按比例缩放 System.Drawing.Bitmap ob = new System.Drawing.Bitmap(width, height); System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(ob); graphics.Clear(System.Drawing.Color.WhiteSmoke); graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; graphics.DrawImage(iSource,new System.Drawing.Rectangle((width-sw)/2,(height-sh)/2,sw,sh),0,0,iSource.Width,iSource.Height,System.Drawing.GraphicsUnit.Pixel); graphics.Dispose(); return ob; } } catch (Exception ex) { WriteLog.WriteErrorInfo(ex); } return bitmap; } #endregion
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具