[英]How to erase content on a Bitmap
我有C#winForm應用程序,它擁有一個pictureBox控件。 此控件具有Paint事件。 每次觸發paint事件時,都會動態創建一個Bitmap,並對其執行一些繪制。 當用戶點擊“保存”按鈕時,編輯的圖像保存為jpg文件。
直到現在都沒關系。 當我在pictureBox中加載新圖像時,之前編輯的剩余部分仍然存在。
每次加載新圖像時,如何擦除位圖並重新開始:
private void pb_Resim_Paint(object sender, PaintEventArgs e)
{
List<eVucutParcalari> list = new List<eVucutParcalari>(pointList.Keys);
// Loop through list
foreach (eVucutParcalari k in list)
{
Dictionary<Point, Color> dicItem = pointList[k];
foreach (KeyValuePair<Point, Color> pair in dicItem)
{
Point p = pair.Key;
Color c = pair.Value;
SolidBrush brush = new SolidBrush(c);
if (pb_Resim.Image == null)
return;
Bitmap bmp = new Bitmap(pb_Resim.Image);
Graphics gr = Graphics.FromImage(bmp);
gr.FillRectangle(brush, p.X, p.Y, 5, 5);
pb_Resim.Image = bmp;
}
}
}
為什么不在加載新文件時創建一個全新的位圖,並在加載時替換當前分配給pb_Resim.Image的位圖? 這將允許GC收集舊的位圖,而無需您花費任何精力“清除”前一個位圖,並確保您擁有一個全新的位圖,而不會為新加載的文件留下任何殘留的垃圾。
Christian Graus撰寫了幾篇關於GDI +的文章,您可以在CodeProject上找到它們。 (向下滾動到GDI +文章。)因為它們與您正在進行的活動類型直接相關,所以我建議您仔細查看。
我想你的意思是清除以前內容的圖片框,它恰好是圖像文件的位圖對象。
您已經完成了新的畫筆,新的位圖,從新的位圖獲取新的圖形畫布。
有沒有機會做一個新的PictureBox?
因為這就是我的應用程序必須快速反復顯示一組圖像時所做的事情。 我確信有更好的方法可以清除圖片框,比如使用refresh()。
foreach ( ... )
{
pb_Resim = new PictureBox();
configPictureBoxDimensions();
...
}
為什么不首先嘗試refresh()? 它應該工作。
foreach ( ... )
{
pb_Resim = bmp;
pb_Resim.refresh();
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.