Files
ShrlAlgoToolkit/ShrlAlgoToolkit.Core/Extensions/ImageExtensions.cs

103 lines
2.8 KiB
C#
Raw Normal View History

2025-04-24 20:56:10 +08:00
using ShrlAlgo.Toolkit.Core.Assist;
using System.Drawing;
2024-09-22 11:05:41 +08:00
using System.Drawing.Imaging;
using System.IO;
using System.Reflection;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media.Imaging;
namespace ShrlAlgo.Toolkit.Core.Extensions;
2024-09-22 11:05:41 +08:00
public static class ImageExtensions
{
2024-12-22 10:26:12 +08:00
/// <summary>
/// 提取资源
/// </summary>
/// <param name="resourceName"></param>
/// <param name="path"></param>
2024-09-22 11:05:41 +08:00
public static void ExtractResource(string resourceName, string path)
{
using var manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
2024-12-22 10:26:12 +08:00
using var stream = File.Create(path);
2024-09-22 11:05:41 +08:00
var array = new byte[8192];
int count;
while ((count = manifestResourceStream.Read(array, 0, array.Length)) > 0)
{
stream.Write(array, 0, count);
}
}
/// <summary>
/// 资源管理器缩略图读取
/// </summary>
/// <param name="filename"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
public static BitmapSource LoadFileImage(string filename, int width, int height)
{
var bm = WindowsThumbnailProvider.GetThumbnail(filename, width, height, ThumbnailOptions.None);
return Imaging.CreateBitmapSourceFromHBitmap(bm.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
}
2024-12-22 10:26:12 +08:00
/// <summary>
/// 位图转图片
/// </summary>
/// <param name="bitmap"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
2024-09-22 11:05:41 +08:00
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;
}
2024-12-22 10:26:12 +08:00
/// <summary>
/// 位图转像素集
/// </summary>
/// <param name="bitmap"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
2024-09-22 11:05:41 +08:00
public static BitmapSource ToBitmapSource(this Bitmap bitmap)
{
if (bitmap == null)
{
2024-12-22 10:26:12 +08:00
throw new ArgumentNullException(nameof(bitmap));
}
2024-09-22 11:05:41 +08:00
return Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
}
/// <summary>
/// Icon转BitmapSource
/// </summary>
/// <param name="icon"></param>
/// <returns></returns>
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)
);
}
}