2016-05-01 40 views
0

好吧,首先,我有一個數據列表(多行)。該數據需要在位圖上預覽(Bitmap是文憑)。點擊預覽按鈕後,我將被髮送到另一個標籤,我可以在其中預覽作業(位圖上帶有圖形)。之後,用戶可以選擇打印數據(圖形)。C#在位圖上繪製圖形動態dillema

如果我選擇不同的行,圖形必須更改。

問題是:我不知道如何實現位圖,何時何地在pictureBox上繪製它。我已經嘗試了許多方法(每次都繪製一個單獨的靜態位圖 - 因爲無法清除它的第二次重繪,具有生成位圖的方法 - 因爲內存泄漏而失敗),但是我要麼終止只能使用背景圖像,或者使用大量內存泄漏(因爲我需要顯示繪製的字符串,我不能處理位圖)。

你有什麼建議我該如何解決這個問題?

Selecting the row for which we're generating the preview

The way the preview window should look like (with text on it, obviously)

回答

0

那麼你需要或者兩個位圖,一個用於透支和一個作爲源或者你需要動態創建的結果每次。

在你需要

  • 任何情況下保持原有的顯卡準備
  • 處置相結合的時候用它

我建議讓事情變得簡單,並創建一個可以在結果圖像進行SelectionChanged

Bitmap diplomaBackground = null; // load upon startup 
Bitmap result = null; 

private void dataGridView1_SelectionChanged(object sender, EventArgs e) 
{ 
    if (result != null) 
    { 
     if (pb_preview.Image != null) pb_preview.Image = null; 
     result.Dispose(); 
    } 

    if (dataGridView1.SelectedRows.Count > 0) 
    { 
     result = CreateNewDiploma(dataGridView1.SelectedRows[0].Index); 
     pb_preview.Image = result; 
    } 
} 

Bitmap CreateNewDiploma(int rowIndex) 
{ 
    Bitmap bmp = new Bitmap(diplomaBackground); 

    using (Graphics G = Graphics.FromImage(bmp)) 
    { 
     // draw the data.. 
    } 
    return bmp; 
} 

設置預覽框放大。

+0

謝謝!我沒有想到這一點,因爲我正在努力在另一個課程中創​​建文憑方法,而且我也沒有辦法處理它(實際上,現在我已經擁有了,因爲你有了Bitmap變化的想法在Form類中)。 –