首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PaintEventArgs.ClipRectangle和PaintEventArgs.Graphics.ClipBounds有什么区别?

PaintEventArgs.ClipRectangle和PaintEventArgs.Graphics.ClipBounds有什么区别?
EN

Stack Overflow用户
提问于 2012-08-21 19:50:00
回答 1查看 5.7K关注 0票数 10

当在OnPaint或OnPaintBackground方法的继承者中重写System.Windows.Forms.Control方法时,一个参数始终是System.Windows.Forms.PaintEventArgs对象。部分对象结构:

  • PaintEventArgs
    • ClipRectangle (System.Drawing.Rectangle)
    • 图形(System.Drawing.Graphics)
      • 剪辑(System.Drawing.Region)
      • ClipBounds (System.Drawing.RectangleF)
      • VisibleClipBounds (System.Drawing.RectangleF)

Graphics.Clip似乎是一个适用像素的1位映射,以影响后续的绘制操作.

MSDN:“获取或设置限制此图形绘图区域的区域。

Graphics.ClipBounds是一个只读矩形,它似乎是完全包含剪辑区域的最小矩形。

MSDN:“获取一个RectangleF结构,该结构限制此图形的裁剪区域。

Graphics.VisibleClipBounds似乎是一个更“智能”的剪辑,尽管我不明白它是如何运作的。

MSDN:“获取此图形的可见裁剪区域的边框。

在所有情况下,ClipRectangle似乎都重复Graphics.ClipBounds属性。

MSDN:“获取要在其中绘制的矩形。

有人能不能回答主要问题,并有可能阐明所有的边界物体是干什么的?

编辑:根据Dan的答案添加了MSDN的描述。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-21 20:45:03

PaintEventArgs.ClipRectangle是实际需要由画图事件绘制的矩形。通常等于控件的工作区的大小。当它的一部分被另一个窗口重叠时,它就会变小。或者当您调用它的失效(矩形)方法时。您可以使用它跳过绘制位于该矩形之外的昂贵对象。这是相当罕见的,Windows本身在裁剪你画的东西方面已经做得很好了。

Graphics.Clip是您可以在绘图代码中指定的区域,用于裁剪您自己绘制的内容。它允许各种效果,比如画一个由圆圈剪裁的图像。或者使用转换为某个区域的GraphicsPath的真正复杂的裁剪效果。

Graphics.ClipBounds是Graphics.Clip周围的矩形,它使得一阶估计值是否在Graphics.Clip之外的数学更快。如果您从未分配过clip属性(X=-4194304,Y=-4194304,Width=8388608,Height=8388608),您将得到一个无意义的“无限”剪辑界。

Graphics.VisibleClipBounds与Graphics.ClipBounds相同,但也被控制窗口裁剪。测试一个点是否在剪辑区域内并对用户可见是非常有用的。如果您从来没有分配剪辑属性,那么您将只得到窗口的大小。

所以是Windows设置了PaintEventArgs.ClipRectangle。其余部分由您通过分配Graphics.Clip属性来设置。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12062019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档