C#でサムネイル用Bitmapオブジェクトを生成するメソッド

コンピュータ

サムネイル用に所定サイズに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,
        };
    }
}

コメント