日期:2014-05-18  浏览次数:20803 次

关于Graphics双缓冲
BufferedGraphicsContext current = BufferedGraphicsManager.Current;
  BufferedGraphics bg = current.Allocate(this.CreateGraphics(), this.DisplayRectangle);

  Graphics g = bg.Graphics;

  Pen pen = new Pen(Color.Red);
  pen.DashStyle = DashStyle.Dash;
  g.DrawRectangle(pen, currRect);
  //this.Invalidate();
  bg.Render();
  bg.Dispose();
这是我利用双缓冲来画矩形 currRect 是我定义的矩形 ,可是在画的过程中总是有一背景,请问有没有办法让背景成透明状或去除掉,大家帮我一下或是利用其他的方法来画,让其不闪烁都行,先在这谢谢了。。。。。。。。。。。。。。

------解决方案--------------------
如果你用了双缓冲来画图,因该是不会闪的
背景透明需要你自己在画的时候写事件,重绘背景
------解决方案--------------------
绘制前Clear
C# code
Graphics g = bg.Graphics;
g.Clear(BackColor);

------解决方案--------------------
pen.DashStyle = DashStyle.Dash;
g.Clear(Color.White)
g.DrawRectangle(pen, currRect);
------解决方案--------------------
C# code

Bitmap bitmap = new Bitmap(DisplayRectangle.Width, DisplayRectangle.Height);
            Graphics g =Graphics.FromImage(bitmap);
            g.Clear(Color.White);
            
            Pen pen = new Pen(Color.Red);
            pen.DashStyle = DashStyle.Dash;
            g.DrawRectangle(pen, new Rectangle(30, 30, 66, 77));
            g.Dispose();
            bitmap.MakeTransparent(Color.White);
        
            pictureBox1.Image = bitmap;

------解决方案--------------------
原来是要在视频上叠加画面.不闪是不可能的.除非改做成透明窗体置于视频上层.
------解决方案--------------------
Bitmap B=New Bitmap(你的图片)
B.MakeTransparent(要挖空的颜色)
PictureBox1.Image=B
------解决方案--------------------
可以考虑使用GraphicsPath叠加