第一次在CSDN发贴,以前只是看贴不回贴 ,在pictureBox1_Paint事件中用Graphics绘图后 在pictureBox1_Paint事件中绘制完毕后 e.Graphics.DrawLine绘制的图像没有反应到image中去么? pictureBox1_Paint事件过后 我也试过这样弄, Bitmap bmp=new Bitmap(200,500); Graphics g = Graphics.FromImage(bmp); ;// e.Graphics; //横网格 Pen backpen = new Pen(Color.FromArgb(cIDE_INFO.colorBack.ToArgb()-0x00404040)); //背景色变暗40 backpen.DashStyle = DashStyle.Custom; //.DashDotDot; backpen.DashPattern = new float[] { 1, 6 }; for (float i = cIDE_INFO.ideCodeSize.Height / 2; i < pictureBox1.Height; i += cIDE_INFO.ideCodeSize.Height) { g.DrawLine(backpen, 0, i, pictureBox1.Width, i); } //竖网格 for (float i = cIDE_INFO.ideCodeSize.Width / 2; i < cIDE_INFO.ideCodeVnum * cIDE_INFO.ideCodeSize.Width; i += cIDE_INFO.ideCodeSize.Width) { g.DrawLine(backpen, i, 0, i, pictureBox1.Height); } //画指令 //todo:要翻页 Point tp=new Point(); foreach (ArrayList tzls in ide_all_zls) { tp.X = 0; foreach (object tzl in tzls) { cIDE_INFO.ideDrawMove(tp, g); if (tzl != null) { if (tzl.GetType() == typeof(ide.code_type)) { cIDE_INFO.DrawZL((ide.code_type)tzl, g); if (((ide.code_type)tzl).分支 == true) { cIDE_INFO.ideDrawMove(tp, g); cIDE_INFO.DrawV(g); } } else if (tzl.GetType() == typeof(string)) { string tstr = (string)tzl; if (tstr.IndexOf("H") >= 0) { cIDE_INFO.DrawH(g); } } } tp.X++; } tp.Y++; } //画当前插入点 反色处理 g.ResetTransform(); pictureBox1.Image = bmp; 这样pictureBox1.Image有东西了,可以保存了了,但似乎很卡,最小化,最大化时,即产生重绘事件时, 正常的: |
|
在线等啊,
其实我的问题很简单,求是在paint事件里用Graphics绘图后picturebox里的image对象为何还为空,没有反应到里面去? |
|
4分 |
你绘图管绘图,Bitmap bmp也照样绘制,相当于同时绘制两张图,最后pictureBox1.Image别去绑bmp,保存用bmp.save
|
也就是pictureBox中现有显示的图形如何复制到另一个pictrueBox中呢?
因为我所有图形都是动态在paint事件中绘制的, |
|
嗯,这样应该可以, pictureBox中现有显示的图形如何复制到另一个pictrueBox中呢? 其实我的最终目的是想让我绘制的图形中一部分反色显示,就是标记出用户所选择的那一块图形, |
|
20分 |
这取决于你另一个pictrueBox如何画,如果是和第一个同步画,那么处理方法和你这个一样,如果是事后才复制,那么就用那个bmp对象绑Image |
paint事件{
e.Graphics.draw___ ///若干条绘图指令 //获取上边绘图的整个图形,将其中一矩形区域图形反色显示,用户选择区域 其实就是想获取即image或者bitmap对象都可以 |
|
见我6楼 paint事件{ //获取上边绘图的整个图形,将其中一矩形区域图形反色显示,用户选择区域 其实就是想获取即image或者bitmap对象都可以 谢谢您的回复 |
|
1分 |
Graphics g2 = Graphics.FromImage(bmp);Graphics又不是规定只能有1个,你两个同时用不就即画了picturebox又有了一个bmp副本了嘛,有了副本什么时候用都行了
|
30分 |
既然绘的图内容要保存,那可以在内容有变化的时候绘到一个Image上,然后在Picturebox上显示就可以了.
pictureBox1_Paint 这个方法楼主不需要用,它只是在窗体显示图像的时候可以做些添油加醋的事情. |