2014-03-24 21 views
3

我已經把這個簡單的代碼放在一起繪製一條線。現在我想申請一個ScaleTransform它的10倍;但下面的代碼不起作用。將ScaleTransform應用於圖形GDI +

var bitmap = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height); 
var g = Graphics.FromImage(bitmap); 
pictureBox1.Image = bitmap; 

var pn = new Pen(Color.Wheat, -1); 
g.DrawLine(pn, 0, 0, 10, 10); 

pn.Dispose(); 

// I'm trying to scaletransform here! 
g.ScaleTransform(10, 10); 

更新:

什麼是更新變化的正確方法是什麼?我沒有得到任何結果從這個:(

g.ScaleTransform(1, 1); 
pictureBox1.Invalidate(); 

回答

3

您必須應用改造前畫線!

var g = Graphics.FromImage(bitmap); 
g.ScaleTransform(10, 10);  
using (pn = new Pen(Color.Wheat, -1)) { 
    g.DrawLine(pn, 0, 0, 10, 10); 
} 

轉換應用到圖形的轉換矩陣對象(g.Transform)。

也可以使用using語句來處理資源,如果發生異常,或者using語句塊應該保留returnbreak聲明。

+0

謝謝Olivier,如果我想稍後改變比例怎麼辦?例如要實現縮放?如何將ScaleTransform應用於已繪製的線? – Vahid

+1

您無法更改現有的圖形。你總是必須重繪它!將繪圖邏輯放入圖片框的「Paint」事件處理程序中,每次縮放因子改變時(通常在鼠標或鍵值改變的事件處理程序中)調用'pictureBox1.Invalidate()。我會直接在圖片框上繪製而不是位圖。 –

+0

所以我們在這裏沒有像'ScaleTransform'這樣的東西可以改變已經畫出的線的比例。謝謝,我會選擇這個作爲正確的答案。我打算通過WPF選擇WinForms,因爲您可以將厚度設置爲-1,並始終獲得一個像素行,並且我認爲可以對其進行縮放而不重繪它以獲得快速結果。我想我會回來與WPF。 – Vahid