有关OnPaint和

zzxxhhzxh 2009-03-20 12:49:04
我是非计算机专业的,可是老师要我编个东西,现在遇到画图和截屏的问题,我要输完数据生成图像后,有个保存图像的菜单,画图是这样的
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawLine(
…………

if (DataForm.CheckT == true)
{
DrawAxis(e.Graphics);
…………
MainForm.ScreenShot();
}


之后我有一个保存图像对话框,但每次保存都会把保存的框一起截了,因为onpaint又运行了一次
public static void ScreenShot()
{
Graphics g = Graphics.FromImage(outPicture);
g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
g.Save();
}
后来我想到把保存ScreenShot()写进输入数据的最后一步里面,结果似乎截图要快于绘图,每次只保存大半张,我不知道专业人士是怎么处理的,最后我想到的办法是在第一个程序里建个条件,放在screenshot前,在运行完screenshot后把条件改为false,但是觉得好难看,有没有比较常规的方法,或者直接输出图像而非截屏

学的不好,望各位大大指点:P
...全文
118 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzxxhhzxh 2009-03-20
  • 打赏
  • 举报
回复
晕哦,提问的标题也没写全,不知道大家看懂没,我可能说的有点乱
lethwei 2009-03-20
  • 打赏
  • 举报
回复
学习了,
刚刚想了半天, 没发现什么办法, 原来还可以这样...
zzxxhhzxh 2009-03-20
  • 打赏
  • 举报
回复
我找到了,有个drawtobitmap(),自学还蛮好玩的,谢谢大家啦
zzxxhhzxh 2009-03-20
  • 打赏
  • 举报
回复
谢谢啦,就是这么写的,我只会用书上讲的,别的查起来又不太方便,成功啦:P
但是我制图的内容有一部分是用tablepanel控件制作的,能保存到绘图里去吗,是不是只能截屏的呀,555
lethwei 2009-03-20
  • 打赏
  • 举报
回复
前段时间刚好做到这个

public Bitmap GetSnapshot(List<Shape> shapes, int width, int height)
{
Bitmap snapshot = new Bitmap(width, height);
Graphics g = Graphics.FromImage(snapshot);
g.FillRectangle(Brushes.White, new Rectangle(new Point(0, 0), new Size(snapshot.Width, snapshot.Height)));
foreach (Shape sp in shapes) {
sp.Draw(g);
}

return snapshot;
}
zzxxhhzxh 2009-03-20
  • 打赏
  • 举报
回复
好,我去试试看
zgke 2009-03-20
  • 打赏
  • 举报
回复
你绘制就别直接绘制到窗体上了 绘制到IMAGE里 保存时候直接保存Image不好吗?
萤火架构 2009-03-20
  • 打赏
  • 举报
回复
显示和保存文件都使用同一个图像数据,这样就不用绘两遍图了
萤火架构 2009-03-20
  • 打赏
  • 举报
回复
不使用截屏,把图像在内存中生成输出为一个文件,应该也可以,未亲自测试

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧