2013-01-11 169 views
0

我想在上傳後調整圖像大小,但它不起作用C# - 上傳後調整圖像大小

怎麼了?

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

} 
+7

你告訴我們:會發生什麼? –

+1

PictureBox已經具有像這樣調整圖像大小的功能,將[BackgroundImageLayout](http://msdn.microsoft.com/en-gb/library/system.windows.forms.control.backgroundimagelayout.aspx)屬性設置爲[拉伸(http://msdn.microsoft。COM/EN-GB /庫/ system.windows.forms.imagelayout.aspx)。它會使圖像的大小與PictureBox相同 – musefan

+0

爲什麼會投票?我已經說了會發生什麼......圖片在圖片框中顯示不完整...出現裁剪 – Ladessa

回答

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

+2

我認爲你有錯誤的屬性,他需要[SizeMode](http://msdn.microsoft.com/en-us/library/system。 windows.forms.picturebox.sizemode.aspx) –

1

您需要從MSDN

默認情況下,在正常模式下,圖像定位在圖片框的左上角設置你的圖片框

SizeMode ,並且對於PictureBox太大的圖像的任何部分都會被剪切。使用StretchImage值可以使圖像伸展或縮小以適合PictureBox。使用縮放值會導致圖像被拉伸或收縮以適合PictureBox;但是,原稿的縱橫比保持不變。

取決於你想要的影響從NormalPictureBox1設置,以便更改爲StretchImageZoom。它會使它按照你想要的方式行事,你可以刪除你的調整大小代碼。

1

那麼您不需要此代碼,只需將SizeMode屬性設置爲StretchImage即可。 但是,你的代碼無法正常工作的極其惱人的原因,正在從一個圖像更改爲另一個不在其中,並且本身會觸發圖片框重繪。

的兩種常用解決方案,其一是

呼叫pictureBox1.Invalidate()分配後的圖像,或做pictureBox1.Image = null,您分配它。

即使使用SizeMode設置,如果圖像的大小與PictureBox相同,不能記住,您可能必須執行其中的一個操作。