BitMap背景色问题
为什么bitmap类型的变量没有设置背景色时,画图是会产生重影?
下面为代码 发表于:2009-02-02 21:25:01 楼主
/*
* Created by SharpDevelop.
* User: Administrator
* Date: 2009-2-2
* Time: 20:26
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Drawing;
using System.Windows.Forms;
namespace DrawG
{
/// <summary>
/// Description of Box2.
/// </summary>
public partial class Box2 : Form
{
protected Image imgPic;
protected Point pS,pE;
protected Graphics temG;
protected Image imgTem;
protected Pen p;
protected bool flag=false ;
public Box2()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
p=new Pen (Color.Blue ,2);
imgPic =new Bitmap (pbImg .Width ,pbImg .Height );
imgTem =(Image )imgPic.Clone () ;
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
void PbImgMouseDown(object sender, MouseEventArgs e)
{
pS =new Point (e.X ,e.Y );
flag =true ;
}
void PbImgMouseMove(object sender, MouseEventArgs e)
{
if (flag )
{
pE =new Point (e.X,e.Y );
Image img=(Image )imgPic .Clone ();
temG =Graphics .FromImage (img );
temG .DrawLine (p,pS ,pE );
temG .Dispose ();
temG =Graphics .FromImage (imgTem );
temG .DrawImage (img,0,0);
temG .Dispose ();
pbImg .CreateGraphics ().DrawImage (img ,0,0);
img .Dispose ();
}
}
void PbImgMouseUp(object sender, MouseEventArgs e)
{
flag =false ;
temG =Graphics .FromImage (imgPic );
temG .DrawImage (imgTem,0,0);
temG .Dispose ();
}
void PbImgPaint(object sender, PaintEventArgs e)
{
Graphics g=e.Graphics ;
g.DrawImage (imgPic ,0,0);
}
}
}
用鼠标画直线产生重影
但是如果为imgPic和imgTem两个变量加入了背景色后就不会产生重影?
比如加入下面的代码:
Graphics g=Graphics .FromImage (imgPic );
g.FillRectangle (new SolidBrush (Color .Gray ),new Rectangle (0,0,pbImg .Width ,pbImg .Height ));
g.Dispose ();
g=Graphics .FromImage (imgTem );
g.FillRectangle (new SolidBrush (Color .Gray ),new Rectangle (0,0,pbImg .Width ,pbImg .Height ));
g .Dispose ();
------解决方案--------------------
简单的说
Graphics g=Graphics .FromImage (imgPic );
g.FillRectangle (new SolidBrush (Color .Gray ),new Rectangle (0,0,pbImg .Width ,pbImg .Height ));
g.Dispose ();
g=Graphics .FromImage (imgTem );
g.FillRectangle (new SolidBrush (Color .Gray ),new Rectangle (0,0,pbImg .Width ,pbImg .Height ));
g .Dispose ();
在执行这个后其实还是重影~~ 只是不设置前面的是透明 你可以看到重影~~设置就看不到重影