Helpers/ImageHelper.cs
using System.IO;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace Maywork.WPF.Helpers;
public static partial class ImageHelper
{
// 画像ファイルを読み込むメソッド
public static BitmapSource Load(string path)
{
using var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
var decoder = BitmapDecoder.Create(
stream,
BitmapCreateOptions.PreservePixelFormat,
BitmapCacheOption.OnLoad);
var frame = decoder.Frames[0];
frame.Freeze();
return frame;
}
// 96DPIに変換する
public static BitmapSource To96Dpi(BitmapSource source)
{
if (Math.Abs(source.DpiX - 96) < 0.01 &&
Math.Abs(source.DpiY - 96) < 0.01)
return source;
var bmp = new RenderTargetBitmap(
source.PixelWidth,
source.PixelHeight,
96,
96,
PixelFormats.Pbgra32);
var dv = new DrawingVisual();
using (var dc = dv.RenderOpen())
{
dc.DrawImage(source,
new Rect(0, 0, source.PixelWidth, source.PixelHeight));
}
bmp.Render(dv);
bmp.Freeze();
return bmp;
}
// Imageコントロール対応拡張子判定
private static readonly HashSet<string> _supportedExtensions =
new(StringComparer.OrdinalIgnoreCase)
{
".jpg",
".jpeg",
".png",
".bmp",
".gif",
".tif",
".tiff",
".webp"
};
/// <summary>
/// 画像として扱う拡張子か判定する
/// </summary>
public static bool IsSupportedImage(string path)
{
if (string.IsNullOrWhiteSpace(path))
return false;
var ext = Path.GetExtension(path);
if (string.IsNullOrEmpty(ext))
return false;
return _supportedExtensions.Contains(ext);
}
}
/*
// 使用例
LoadCommand = new RelayCommand(async _ =>
{
var path = @"C:\temp\test.jpg";
if (!ImageHelper.IsSupportedImage(path))
return;
var bmp = await Task.Run(() =>
{
var img = ImageHelper.Load(path);
return ImageHelper.To96Dpi(img);
});
Image = bmp;
});
*/
Download

コメント