RoundRect 的圆角边缘不平滑

Posted

技术标签:

【中文标题】RoundRect 的圆角边缘不平滑【英文标题】:Rounded edges with RoundRect are not smooth 【发布时间】:2012-05-28 10:22:06 【问题描述】:

我正在使用 RoundRect windows API 绘制圆角矩形。

RoundRect(hdc,0,0,100,100,4,4);

我在这里绘制圆角宽度和高度 = 4 px 的矩形。

之后我想填充圆角矩形。为此,我正在使用

创建矩形区域
CreateRoundRectRgn

然后调用 FillRgn API。

问题是填充后我也可以看到圆角外的填充颜色。由于我正在创建圆形区域,因此填充应该只在该区域内。

任何想法为什么它会超出圆角矩形?

【问题讨论】:

【参考方案1】:

RoundRect 已经使用当前画笔填充了矩形。只需使用SelectObject 选择您想要的画笔即可。

这使得以下观察有些多余。 RoundRectCreateRoundRectRgn 对坐标的解释不同。 RoundRect 的坐标包含在内,但CreateRoundRectRgn 的坐标在右下角是独占的(因此在后一种情况下,您必须在右下角坐标中添加一个)。

而且由于 Windows 不提供获取与圆角矩形内部相对应的区域的功能,因此如果您自己填充它,您将永远无法获得像素完美的精度(圆角矩形的内部不一样)作为一个稍小的圆角矩形)。

【讨论】:

以上是关于RoundRect 的圆角边缘不平滑的主要内容,如果未能解决你的问题,请参考以下文章

如何使用border-radius htc hack和MSIE v:roundrect仅获得一个圆角?

快速平滑圆角

圆角视图不平滑

c# 用圆角图片做界面 边缘不齐

带圆角的矩形

做两个圆角和两个直切而不是颤动中的曲线