using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Windows; using System.Windows.Interop; using System.Windows.Media; using System.Windows.Media.Imaging; namespace ShrlAlgoToolkit.RevitAddins.Common.Extensions; public static class ImageExtensions { /// /// 位图转图片 /// /// /// /// public static BitmapImage ToBitmapImage(this Bitmap bitmap) { if (bitmap is null) { throw new ArgumentNullException(nameof(bitmap)); } using var ms = new MemoryStream(); bitmap.Save(ms, ImageFormat.Png); ms.Position = 0; var result = new BitmapImage(); result.BeginInit(); result.StreamSource = ms; result.CacheOption = BitmapCacheOption.OnLoad; result.EndInit(); return result; } /// /// 位图转像素集 /// /// /// public static BitmapSource ToBitmapSource(this Bitmap bitmap) { return bitmap == null ? null : Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); } /// /// Icon转BitmapSource /// /// /// public static BitmapSource ToBitmapSource(this Icon icon) { return Imaging.CreateBitmapSourceFromHIcon( icon.Handle, new Int32Rect(0, 0, icon.Width, icon.Height), BitmapSizeOptions.FromWidthAndHeight(icon.Width, icon.Height) ); } public static ImageSource ConvertBitmapToImageSource(this Bitmap bitmap) { using (MemoryStream memory = new MemoryStream()) { bitmap.Save(memory, ImageFormat.Png); memory.Position = 0; BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = memory; bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); return bitmapImage; } } }