2014-08-30 54 views
0

所以我試圖編寫一個程序,繪製一個圓,每1度繪製一條線,並通過增加RGB(隨機啓動)來改變顏色。未分配的本地變量與圖形的使用.Drawing

這裏是我到目前爲止

public static void drawCircle(int iRandR, int iRandG, int iRandB) 
{ 
    for (int x = 0; x < 359; ++x) 
    { 
     double dXAngle = 0; 
     double dYAngle = 0; 
     dXAngle = 300 + Math.Cos(x) + 200; 
     dYAngle = 300 + Math.Sin(x) + 200; 
     Pen pPen = new Pen(Color.FromArgb(255, iRandR, iRandG, iRandB)); 
     Graphics gDraw; 
     int iXAngle = Convert.ToInt32(dXAngle); 
     int iYAngle = Convert.ToInt32(dYAngle); 
     gDraw.DrawLine(pPen, 300, 300, iXAngle, iYAngle); //Error called here 
    } 

} 
private void drawCircleButton_Click(object sender, EventArgs e) 
{ 
    int genRandR = 0; 
    int genRandG = 0; 
    int genRandB = 0; 
    Random rRand = new Random(); 
    genRandR = rRand.Next(0, 255); 
    genRandG = rRand.Next(0, 255); 
    genRandB = rRand.Next(0, 255); 
    drawCircle(genRandR, genRandG, genRandB); 
    drawCircleButton.Hide(); 
} 

唯一的問題是,編譯器與上述線路有問題,它會拋出「未分配的局部變量的‘gDraw’使用」我做了一些代碼谷歌搜索和很多其他的例子看起來像我的,但我不明白爲什麼我會拋出這個錯誤。

任何幫助將不勝感激。

+0

'gDraw'('Graphics' to be specific)是一個引用類型。它沒有默認值。因此,需要初始化(使用'new'關鍵字也許?) – PoweredByOrange 2014-08-30 00:14:43

+0

你在畫什麼?一個WinForms控件?一個'位圖'? – Groo 2014-08-30 00:27:50

回答

2

您需要從某處傳遞所需的Graphics instance作爲參數。正如MSDN上所解釋的,Graphics類封裝了GDI +繪圖表面。它用於將各種繪圖操作抽象爲不同的顯示設備(屏幕,位圖,圖元文件或甚至打印)。

public static void DrawCircle(Graphics gDraw, int iRandR, int iRandG, int iRandB) 
{ 
    ... 
} 

你可能從Paint事件處理程序,或類似的東西,在這裏你可以訪問你想提請Graphics對象調用它。 I. .:

protected override void OnPaint(PaintEventArgs p) 
{ 
    var graphics = p.Graphics; 
    DrawCircle(graphics, ...); 
} 
+1

我已經完成了這一百萬次,還有一些我如何忘記了這一點...非常感謝! – Cistoran 2014-08-30 00:29:08

+0

第二次看,它看起來像OnPaint自動運行,沒有我叫它,奇怪。 – Cistoran 2014-08-30 00:41:10

+0

@Cistoran:當控件即將繪製時,在GUI線程上調用「OnPaint」。具體而言,當它失效時,Windows將向該窗體發送一條繪畫消息,該消息將調用「OnPaint」方法。你不需要(也不應該)調用它,你通常會覆蓋它來放置你自己的繪圖邏輯。如果你不這樣做,調用基礎Control.OnPaint方法,並且你的控件(或者UserControl或者Form)被默認的看起來,然後觸發'Paint'事件。 – Groo 2014-08-30 00:44:00

相關問題