【发布时间】:2020-03-06 23:06:28
【问题描述】:
我一直在绘制不同的分形,当我更改某些 TrackBar 的值时,我需要重新绘制分形。
在这种情况下,值会改变分形函数的递归深度。
我的问题是在我的分形完成绘制后它消失了。
我试过尝试使用:
pictureBox1.Invalidate();
DrawCloverFractal(...); //fractal drawing method
但我找不到让它正常工作的方法。
我也试过用:
if (pictureBox1.InitialImage != null)
{
pictureBox1.InitialImage.Dispose();
pictureBox1.InitialImage = null;
pictureBox1.Invalidate();
}
但它根本没有重新绘制任何东西。
完整代码:
//Drawing method
int DrawCloverFractal(int x0, int y0, int r, int dir, int iter)
{
var g = pictureBox1.CreateGraphics();
var S = new SolidBrush(Color.Black);
g.FillEllipse(S, x0 - r, y0 - r, 2 * r, 2 * r);
if (iter == 0)
return 0;
int[] x = new int[4];
int[] y = new int[4];
int d = 3 * r / 2;
x[0] = x0 - d;
y[0] = y0;
x[1] = x0;
y[1] = y0 - d;
x[2] = x0 + d;
y[2] = y0;
x[3] = x0;
y[3] = y0 + d;
for (int i = 0; i < 4; i++)
{
if (i - dir == 2 || i - dir == -2)
continue;
DrawCloverFractal(x[i], y[i], r / 2, i, iter - 1);
}
return 0;
}
//Scroll method where I call DrawCloverFractal
private void RecursionLevel_Scroll(object sender, EventArgs e)
{
pictureBox1.Invalidate();
DrawCloverFractal(pictureBox1.Width / 2, pictureBox1.Height / 2, (int)(pictureBox1.Height * 0.17), 1, RecursionLevel.Value);
}
【问题讨论】:
-
将您的
DrawCloverFractal调用放在pictureBox1.Paint事件处理程序中,并使用e.Graphics对象进行绘图 -
@Jimi 这是生成绘图的代码code(由于字符太多,无法在此处插入代码)我在那里使用 .CreateGraphics() ,我的问题是完成绘图后面板框清除。
标签: c# winforms graphics drawing gdi+