2017-03-07 79 views
0

我使用常用​​的方法來繪製一個圖片框,即首先在位圖上繪製並將其內容複製到圖片框圖像之後。picturebox1.Image = bmp VS picturebox1.Image = new Bitmap(bmp)?

Bitmap bmp; 
bmp = new Bitmap(pb.Width, pb.Height); 

Graphics g = Graphics.FromImage(bmp); 
g.Draw(...); 

我想知道,在所有的繪圖人員都在使用以下之間有什麼區別?

pb.Image = bmp; 

pb.Image = new Bitmap(bmp); 
+0

第二個語法是一個錯誤。無意義的內存浪費*和*增加了忘記正確調用Dispose()的機率。忘記處理分配給Image的舊位圖是另一個經典錯誤。 –

+0

這不是一個錯誤,它實際上創建了一個新的位圖複製。當然,他應該處置原件,但這不是一個壞的方法。爲了速度,我強烈建議克隆。不過,我會檢查picturebox圖像是否爲null,如果不是,那麼以我的經驗來看,它們真的很吸引內存管理。 – Trey

+0

哦方面說明把一個使用的圖形對象.. – Trey

回答

1

有pb.Image = BMP;將現有位圖分配給您的屬性。 pb.Image =新的位圖(bmp);創建一個新的位圖,它本質上是一個深層副本。

+0

你是對的。與.NET中任何其他類的行爲一樣。我很困惑,因爲圖片框需要刷新以查看更改。當做這個任務時,自動進行刷新 - 這就是爲什麼它看起來像製作一個深層副本,而不是僅僅設置參考。 – tarpista