C# - 上传后调整图像大小

时间:2013-01-11 16:51:20

标签: c# image visual-studio

我正在尝试在上传后调整图片大小,但它不起作用

怎么了?

   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;
        } 

 }

3 个答案:

答案 0 :(得分:3)

PictureBox已经能够调整图像大小。

如果使用Image属性分配图像,则可以将SizeMode属性设置为StretchImage。这意味着你的代码看起来像这样:

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

如果要使用BackgroundImage属性分配图像,则可以将BackgroundImageLayout属性设置为Stretch。这意味着你的代码看起来像这样:

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

从个人经验来看,我发现PictureBox控件很痛苦。如果您需要在任何时候更改或删除图像,我总是发现我需要明确处理图像或者它给了我内存泄漏,在某些情况下只是简单的错误。值得注意的是,当您需要在WinForms中进行自定义绘图或渲染时,Panel控件是一个更好的选择。您也可以在Panel上绘制图片,但根据您的需要,您可能会发现只使用PictureBox

答案 1 :(得分:1)

您需要设置图片框的SizeMode

来自MSDN的

  

默认情况下,在“正常”模式下,“图像”位于PictureBox的左上角,图像的任何对于PictureBox来说太大的部分都会被剪裁。使用StretchImage值会导致图像拉伸或缩小以适合PictureBox。使用“缩放”值可以拉伸或缩小图像以适合PictureBox;但是,保持原件的纵横比。

因此,根据您想要的效果,将PictureBox1上的设置从Normal更改为StretchImageZoom。它会按照你想要的方式行动,你可以删除你的调整大小代码。

答案 2 :(得分:1)

嗯,您不需要此代码,只需将SizeMode属性设置为StretchImage即可。 然而,你的代码无法工作的极其刺激的原因是,从一个图像到另一个图像的变化本身并不会触发图片框重绘。

两种常用的解决方案是

在分配图像后致电pictureBox1.Invalidate(),或在分配之前调用pictureBox1.Image = null

即使设置了SizeMode,您也可能必须执行其中一项操作,如果图像与PictureBox的大小相同,则无法记住。