2025年4月13日日曜日

C# Windows FormsアプリケーションでImageの表示サイズを縮小したい

 C# Windows FormsアプリケーションでImageの表示サイズを縮小したい場合、主に PictureBox コントロールのプロパティを使用します。

最も簡単な方法:PictureBoxのSizeModeプロパティを使用する

PictureBoxコントロールには、表示する画像のサイズ調整方法を制御する SizeMode プロパティがあります。このプロパティを変更することで、簡単に画像の表示サイズを調整できます。

  1. PictureBoxコントロールを選択します。
  2. プロパティウィンドウを開きます。 (通常はVisual Studioの右側に表示されています。表示されていない場合は、メニューバーの「表示」→「プロパティウィンドウ」を選択します。)
  3. SizeModeプロパティを探して、ドロップダウンリストから適切なオプションを選択します。

利用できる主なSizeModeオプションは以下の通りです。

  • Normal: 画像を元のサイズで表示します。PictureBoxのサイズよりも大きい場合は、画像の一部が切り取られて表示されます。
  • StretchImage: 画像をPictureBoxのサイズに合わせて拡大または縮小して表示します。縦横比は維持されません。
  • AutoSize: PictureBoxのサイズを画像のサイズに合わせて自動的に調整します。
  • CenterImage: 画像をPictureBoxの中央に表示します。PictureBoxのサイズよりも大きい場合は、画像の一部が切り取られて表示されます。
  • Zoom: 画像の縦横比を維持したまま、PictureBoxにできるだけ大きく表示します。PictureBoxのサイズよりも大きい場合は、全体が表示されるように縮小されます。PictureBoxのサイズよりも小さい場合は、拡大されます。縮小表示したい場合は、このオプションが適していることが多いです。

例:SizeModeをZoomに設定するコード

C#
// PictureBoxコントロールの名前をpictureBox1と仮定
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

SizeModeプロパティをコードから設定する方法

フォームのロード時や、画像をPictureBoxに設定する際に、コードからSizeModeプロパティを設定することもできます。

C#
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Load += Form1_Load;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // 画像を読み込む
        Image image = Image.FromFile("path/to/your/image.jpg");

        // PictureBoxに画像を設定
        pictureBox1.Image = image;

        // SizeModeをZoomに設定して表示サイズを縮小
        pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
    }
}

補足:Paintイベントで描画サイズを制御する方法 (より高度な場合)

より細かく表示サイズを制御したい場合は、PictureBoxの Paint イベントを処理し、Graphicsオブジェクトの DrawImage メソッドを使用して、指定したサイズで画像を描画する方法もあります。

C#
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    if (pictureBox1.Image != null)
    {
        // 描画先のRectangleを指定 (PictureBoxのクライアント領域)
        Rectangle destRect = new Rectangle(0, 0, pictureBox1.Width / 2, pictureBox1.Height / 2); // 例:半分のサイズで描画

        // 元の画像のRectangleを指定
        Rectangle srcRect = new Rectangle(0, 0, pictureBox1.Image.Width, pictureBox1.Image.Height);

        // Graphicsオブジェクトを使って画像を描画
        e.Graphics.DrawImage(pictureBox1.Image, destRect, srcRect, GraphicsUnit.Pixel);
    }
}

この方法では、destRect で描画先のサイズと位置を指定することで、表示サイズを自由に制御できます。ただし、SizeModeプロパティを使用するよりも複雑になります。

ほとんどの場合、PictureBoxのSizeModeプロパティを適切に設定することで、Imageの表示サイズを簡単に縮小できます。特に、縦横比を維持したまま縮小したい場合は PictureBoxSizeMode.Zoom を試してみてください。

0 件のコメント:

コメントを投稿