C#gdi+求助 !!!!!!
我用C#的GDI+在FORM窗体上drawimage显示一个图像,然后我想在同一窗体上再drawimage另一张图像,目的是在同一个from窗体中删除一张图像后再显示另一...
我用C#的GDI+在FORM窗体上drawimage显示一个图像,然后我想在同一窗体上再drawimage另一张图像,目的是在同一个from窗体中删除一张图像后再显示另一张图像,如此不断反复操作,但是Graphics的Dispose方法只是用来释放对象,并不能清空画板,请问我应该用什么方法来实现这种效果呢?
(- - 不要说什么再画一张空白的覆盖上去或者clear上背景色什么的....我是要清空上一张图像) 展开
(- - 不要说什么再画一张空白的覆盖上去或者clear上背景色什么的....我是要清空上一张图像) 展开
3个回答
展开全部
Clear(Color)这个是可以做的。但我觉得有些东西你并没有搞清楚。
GDI+一个Image对象,就是从一个Image对象上创建一个Graphics画板,在这个画板对象上调用Clear方法,就可以清空它的所有图像。问题在于,你画两张Image,当然会产生两个Grapics对象。如果要清空上一张,只要调用上一张画板的Clear就可以了,但是上一张图相对应的Graphics,你有保存吗?建议你为form定义一个变量,每次绘图产生的Graphics都存到这个对象里,然后下次绘图时,先调用Clear清空当前图。然后再保存下个Graphics对象就可以了。
GDI+一个Image对象,就是从一个Image对象上创建一个Graphics画板,在这个画板对象上调用Clear方法,就可以清空它的所有图像。问题在于,你画两张Image,当然会产生两个Grapics对象。如果要清空上一张,只要调用上一张画板的Clear就可以了,但是上一张图相对应的Graphics,你有保存吗?建议你为form定义一个变量,每次绘图产生的Graphics都存到这个对象里,然后下次绘图时,先调用Clear清空当前图。然后再保存下个Graphics对象就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//取得图片大小
System.Drawing.Size size = new System.Drawing.Size((int)image.Width, (int)image.Height);
//新建一个bmp图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(size.Width, size.Height);
//新建一个画板
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default;
//清空一下画布
g.Clear(System.Drawing.Color.White);
//在指定位置画图
g.DrawImage(image, new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
new System.Drawing.Rectangle(0, 0, image.Width, image.Height),
System.Drawing.GraphicsUnit.Pixel);
//文字水印
System.Drawing.Graphics G=System.Drawing.Graphics.FromImage(bitmap);
System.Drawing.Font f=new Font("宋体",10);
System.Drawing.Brush b=new SolidBrush(Color.Black);
G.DrawString("hi.baidu.com/emixo",f,b,10,10);
G.Dispose();
System.Drawing.Size size = new System.Drawing.Size((int)image.Width, (int)image.Height);
//新建一个bmp图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(size.Width, size.Height);
//新建一个画板
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default;
//清空一下画布
g.Clear(System.Drawing.Color.White);
//在指定位置画图
g.DrawImage(image, new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
new System.Drawing.Rectangle(0, 0, image.Width, image.Height),
System.Drawing.GraphicsUnit.Pixel);
//文字水印
System.Drawing.Graphics G=System.Drawing.Graphics.FromImage(bitmap);
System.Drawing.Font f=new Font("宋体",10);
System.Drawing.Brush b=new SolidBrush(Color.Black);
G.DrawString("hi.baidu.com/emixo",f,b,10,10);
G.Dispose();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议你别直接画在窗体是,弄一个PictureBox 画在这上面!~
每次重画之前,可以重绘一下PictureBox如: PictureBox1.Invalidate().
每次重画之前,可以重绘一下PictureBox如: PictureBox1.Invalidate().
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询