graphics 画图闪烁的问题 graphics画矩形,用timer事件画的,然后都refresh,矩形多了闪烁,怎么解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://community.csdn.net/Expert/topic/5406/5406642.xml?temp=.2067224 Dim bmp As New Bitmap(Width, Height)Dim g As Graphics = Graphics.FromImage(bmp)g.DrawRect1(……)g.DrawRect2(……)g.DrawRect3(……)PictureBox1.CreateGraphics.DrawImage(bmp, 0, 0)这么处理一下好点 Bitmap bit=null;bit=new Bitmap( , );Graphics g= Graphics.FromImage(b2);g.Clear(Color.White);g.Draw...............Graphics g = Graphics.FromHwnd(this.Handle);g.DrawImage(b0,10,10); //trythis.Invalidate(); this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); 利用GDI+的双缓冲技术来提高绘图效率 1、在内存中建立一块“虚拟画布”:Bitmap bmp = new Bitmap(600, 600); 2、获取这块内存画布的Graphics引用:Graphics g = Graphics.FromImage(bmp); 3、在这块内存画布上绘图:g.FillEllipse(brush, i * 10, j * 10, 10, 10); 4、将内存画布画到窗口中this.CreateGraphics().DrawImage(bmp, 0, 0);绝对可行的~试过了~ 去掉了,是在timer事件里面画,每隔一秒画一个矩形,然后坐标变化,把上一个矩形移除,可以看到矩形在动,每次timer事件都要刷新一次,是不是根这个有关系?不刷新的话,矩形就显示不出来 private void panel1_Paint(object sender, PaintEventArgs e) { Bitmap bmp = new Bitmap(300, 450); Graphics gra = Graphics.FromImage(bmp); // Graphics gra = this.panel1.CreateGraphics(); for (int i = 0; i < rectangles.Count; i++) { gra.DrawRectangle(new Pen(Color.Black, 1), rectangles[i]); } this.panel1.CreateGraphics().DrawImage(bmp, 0, 0); } private void timer1_Tick(object sender, EventArgs e) { j++; y+=30; Rectangle rec = new Rectangle(x, y, 30, 30); rectangles.Add(rec); if (rectangles.Count > j + 1) { rectangles.RemoveAt(j); } this.panel1.Invalidate(); } //private void panel1_Paint(object sender, PaintEventArgs e)//{//Bitmap bmp = new Bitmap(300, 450);//Graphics gra = Graphics.FromImage(bmp);// Graphics gra = this.panel1.CreateGraphics();//for (int i = 0; i < rectangles.Count; i++)//{//gra.DrawRectangle(new Pen(Color.Black, 1), rectangles[i]);//}//this.panel1.CreateGraphics().DrawImage(bmp, 0, 0);//}private void timer1_Tick(object sender, EventArgs e){ j++;y+=30;Rectangle rec = new Rectangle(x, y, 30, 30);rectangles.Add(rec);if (rectangles.Count > j + 1){rectangles.RemoveAt(j);}//this.panel1.Invalidate();Bitmap bmp = new Bitmap(300, 450);Graphics gra = Graphics.FromImage(bmp);// Graphics gra = this.panel1.CreateGraphics();for (int i = 0; i < rectangles.Count; i++){gra.DrawRectangle(new Pen(Color.Black, 1), rectangles[i]);}this.panel1.CreateGraphics().DrawImage(bmp, 0, 0);} C# 如何用代码改变列的类型 通过ado.net读取Excel文件,进行筛选出现的问题 c# 多线程的问题 connector string 这是什么东东? 使用C#实现双显示器显示 c#怎样实现类似Runas命令的代码啊! 一个棘手的问题,进来看看分不够可以在加 上海C# 程序员报道贴! 这样的“数据汇总”过程怎么处理比较好? 大家看看这段小程序,有些不知道怎么写。 为什么画的矩形闪烁,如何解决
Dim g As Graphics = Graphics.FromImage(bmp)g.DrawRect1(……)
g.DrawRect2(……)
g.DrawRect3(……)PictureBox1.CreateGraphics.DrawImage(bmp, 0, 0)这么处理一下好点
bit=new Bitmap( , );
Graphics g= Graphics.FromImage(b2);
g.Clear(Color.White);g.Draw...............
Graphics g = Graphics.FromHwnd(this.Handle);
g.DrawImage(b0,10,10);
this.Invalidate();
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
1、在内存中建立一块“虚拟画布”:Bitmap bmp = new Bitmap(600, 600); 2、获取这块内存画布的Graphics引用:Graphics g = Graphics.FromImage(bmp); 3、在这块内存画布上绘图:g.FillEllipse(brush, i * 10, j * 10, 10, 10); 4、将内存画布画到窗口中this.CreateGraphics().DrawImage(bmp, 0, 0);绝对可行的~试过了~
{ Bitmap bmp = new Bitmap(300, 450);
Graphics gra = Graphics.FromImage(bmp);
// Graphics gra = this.panel1.CreateGraphics();
for (int i = 0; i < rectangles.Count; i++)
{
gra.DrawRectangle(new Pen(Color.Black, 1), rectangles[i]);
}
this.panel1.CreateGraphics().DrawImage(bmp, 0, 0);
}
private void timer1_Tick(object sender, EventArgs e)
{ j++;
y+=30;
Rectangle rec = new Rectangle(x, y, 30, 30);
rectangles.Add(rec);
if (rectangles.Count > j + 1)
{
rectangles.RemoveAt(j);
}
this.panel1.Invalidate();
}
//{//Bitmap bmp = new Bitmap(300, 450);
//Graphics gra = Graphics.FromImage(bmp);
// Graphics gra = this.panel1.CreateGraphics();
//for (int i = 0; i < rectangles.Count; i++)
//{
//gra.DrawRectangle(new Pen(Color.Black, 1), rectangles[i]);
//}
//this.panel1.CreateGraphics().DrawImage(bmp, 0, 0);
//}private void timer1_Tick(object sender, EventArgs e)
{ j++;
y+=30;
Rectangle rec = new Rectangle(x, y, 30, 30);
rectangles.Add(rec);
if (rectangles.Count > j + 1)
{
rectangles.RemoveAt(j);
}
//this.panel1.Invalidate();Bitmap bmp = new Bitmap(300, 450);
Graphics gra = Graphics.FromImage(bmp);
// Graphics gra = this.panel1.CreateGraphics();
for (int i = 0; i < rectangles.Count; i++)
{
gra.DrawRectangle(new Pen(Color.Black, 1), rectangles[i]);
}
this.panel1.CreateGraphics().DrawImage(bmp, 0, 0);}