サムネイル用に所定サイズにBitimapオブジェクトを生成します。
namespace Thumbnail01;
using System.Drawing;
using System.Drawing.Drawing2D;
public static class ImageResizer
{
/// <summary>
/// サムネイル画像を生成します(縦横比維持オプション付き)
/// </summary>
/// <param name="source">元画像</param>
/// <param name="canvasWidth">幅</param>
/// <param name="canvasHeight">高さ</param>
/// <param name="preserveAspect">縦横比を維持するか</param>
/// <returns>サムネイル画像のBitmap(呼び出し側でDisposeが必要)</returns>
public static Bitmap GenerateThumbnail(Bitmap source, int canvasWidth, int canvasHeight, bool preserveAspect = true)
{
float ratioX = (float)canvasWidth / source.Width;
float ratioY = (float)canvasHeight / source.Height;
float ratio = Math.Min(ratioX, ratioY);
int targetWidth = (int)(source.Width * ratio);
int targetHeight = (int)(source.Height * ratio);
int offsetX = (canvasWidth - targetWidth) / 2;
int offsetY = (canvasHeight - targetHeight) / 2;
var thumbnail = new Bitmap(
canvasWidth, canvasHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
using (var g = Graphics.FromImage(thumbnail))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.Clear(Color.Transparent);
g.DrawImage(source, offsetX, offsetY, targetWidth, targetHeight);
}
return thumbnail;
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
string imgFile = @"H:\csharp\runcheck\Thumbnail01\20240822151636.png";
using Bitmap source = new (imgFile);
Bitmap thumb = ImageResizer.GenerateThumbnail(source, 256, 256, true);
var picbox = new PictureBox()
{
Dock = DockStyle.Fill,
SizeMode = PictureBoxSizeMode.CenterImage,
Parent = this,
Image = thumb,
};
}
}
コメント