C#GDI+画图,坐标图太大,画布内放不下,需要实现绘制画布内的东西,画布外的不绘制

qq_41609090 2018-01-23 09:21:52
求大神,C#GDI+画图,坐标图太大,画布内放不下,当任意移动图片时,需要实现绘制画布内的东西,画布外的不绘制,需要一些代码,谢谢啦!!!
...全文
629 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-01-24
  • 打赏
  • 举报
回复
绘图的有效区域是固定的,但里面的内容是你控制的,既然你有滚动条,那么就按滚动条位置绘制相应的数据
qq_41609090 2018-01-24
  • 打赏
  • 举报
回复
我尝试了一下,但是绘图的有效区域是固定的,因为有滚动条,我想看那些之前没在屏幕上绘制的点就看不到了,怎么能让这个绘制的无效区域随着我移动图而移动啊
qq_41609090 2018-01-23
  • 打赏
  • 举报
回复
是的,我就是画一些离散的点,怎么指定剪裁区啊,我就是想在屏幕之内的图像绘制,不在屏幕之内的不绘制,因为点太多,很卡,这样我既能看到图像,也解决卡的问题
xuzuning 2018-01-23
  • 打赏
  • 举报
回复
除非你绘制的都是平行于坐标轴的线或离散的点,否则不可能仅从坐标值就判断出是否应该绘制 所以应通过指定裁剪区的方式,让 GDI+ 决定绘制多少
qq_41609090 2018-01-23
  • 打赏
  • 举报
回复
好的,明白了,那我这句代码是只写在绘图事件里吗,因为我还要实现缩放功能,涉及到重绘过程,是需要用Invalidate();只重绘工作区吗
xuzuning 2018-01-23
  • 打赏
  • 举报
回复
另外 PaintEventArgs 提供了一个 ClipRectangle,用于通知你需要重绘的区域
xuzuning 2018-01-23
  • 打赏
  • 举报
回复
每个控件都有一个 ClientRectangle 你在哪个控件上画,就用哪个的 ClientRectangle 你也可以指定一个小的 Rectangle 用于测试 当然,需要注意的是:设定了裁剪区域后,只是不在裁剪区域的点不会有实际的绘画的行为 但是并不是说那个点的数据不会产生(有了点数据,才可能进行判断),所以如果数据点的产生是一个漫长的过程的话,绘制过程也不会快到哪里去
qq_41609090 2018-01-23
  • 打赏
  • 举报
回复
十分感谢,我用了这段代码,但是图画出来的时候还是慢,我就是想让电脑屏幕部分绘制,其他不绘制,ClientRectangle大小是指画板大小吗还是屏幕大小,不太清楚
xuzuning 2018-01-23
  • 打赏
  • 举报
回复
g.Clip = new Region(ClientRectangle);

g 是 Graphics 实例
ClientRectangle 是控件的客户区(也就是当前的有效绘图区域

如不指定的话 g.Clip 是一个极大的区域

看不见的也画,自然就慢了

当然,对于全是离散点,也可以用 ClientRectangle.Contains(x, y) 判断是否需要画出

110,534

社区成员

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

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

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