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 已经具有调整图像大小的能力。

如果您使用该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控件是一个更好的选择。您也可以在 a 上绘制图像Panel,但根据您的需要,您可能会发现只使用PictureBox

于 2013-01-11T17:06:31.830 回答
1

您需要设置图片框的SizeMode

来自 MSDN

默认情况下,在 Normal 模式下,Image 位于 PictureBox 的左上角,任何对于 PictureBox 来说太大的图像部分都会被剪裁掉。使用 StretchImage 值会使图像拉伸或收缩以适合 PictureBox。使用 Zoom 值会导致图像被拉伸或缩小以适合 PictureBox;但是,原始的纵横比保持不变。

因此,将设置PictureBox1从更改NormalStretchImageZoom取决于您想要的影响。它将使它按照您的意愿行事,并且您可以删除调整大小的代码。

于 2013-01-11T17:04:56.497 回答
1

好吧,您不需要此代码,只需将 SizeMode 属性设置为 StretchImage。但是,您的代码不起作用的极其令人讨厌的原因是从一个图像更改为另一个图像本身并不会触发图片框重绘。

两种通常的解决方案是

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

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

于 2013-01-11T17:16:33.363 回答