0

アップロード後に画像のサイズを変更しようとしていますが、機能しません

どうしたの?

   private void button1_Click(object sender, EventArgs e)
    {
    OpenFileDialog open = new OpenFileDialog(); 

     open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp"; 
       if (open.ShowDialog() == DialogResult.OK)
    {
        var imagem = new Bitmap(open.FileName);
        var resizedImage = new Bitmap(imagem, pictureBox1.Size);
       pictureBox1.Image = resizedImage;
        } 

 }
4

3 に答える 3

3

PictureBox には、既に画像のサイズを変更する機能があります。

プロパティを使用して画像を割り当てる場合は、 SizeModeプロパティをStretchImageImageに設定できます。つまり、コードは次のようになります。

var imagem = new Bitmap(open.FileName);
pictureBox1.Image = imagem;

プロパティを使用して画像を割り当てる場合は、 BackgroundImageLayoutプロパティをStretchBackgroundImageに設定できます。つまり、コードは次のようになります。

var imagem = new Bitmap(open.FileName);
pictureBox1.BackgroundImage = imagem;

個人的な経験から、PictureBox コントロールが苦痛であることがわかりました。いつでも画像を変更または削除する必要がある場合は、画像を明示的に破棄する必要があるか、メモリリークが発生し、場合によっては単純なエラーが発生することが常にわかっていました。WinForms でカスタムの描画やレンダリングを行う必要がある場合は、Panelコントロールの方がはるかに優れたオプションであることに注意してください。に画像を描画することもできPanelますが、必要に応じて、PictureBox

于 2013-01-11T17:06:31.830 に答える
1

このコードは必要ありません。SizeModeプロパティをStretchImageに設定するだけです。ただし、コードが機能しない非常に苛立たしい理由は、ある画像から別の画像に変更しても、それ自体では画像ボックスが再描画されることはありません。

2つの通常の解決策はどちらかです

pictureBox1.Invalidate()画像を割り当てた後、または行う前に、画像を割り当てる前に呼び出してくださいpictureBox1.Image = null

画像がPictureBoxと同じサイズである場合、SizeModeが設定されていても、これらのいずれかを実行する必要がある場合があります。

于 2013-01-11T17:16:33.363 に答える
1

画像ボックスのSizeModeを設定する必要があります

MSDN から

既定では、通常モードでは、Image は PictureBox の左上隅に配置され、PictureBox に対して大きすぎるイメージの部分は切り取られます。StretchImage 値を使用すると、PictureBox に合わせて画像が拡大または縮小されます。Zoom 値を使用すると、PictureBox に合わせて画像が拡大または縮小されます。ただし、元の縦横比は維持されます。

そのため、必要な影響に応じて、設定をPictureBox1からNormalに変更します。それはあなたが望むように動作し、サイズ変更コードを削除できます。StretchImageZoom

于 2013-01-11T17:04:56.497 に答える