使用 Gdk Cairo 上下文绘制椭圆

Posted

技术标签:

【中文标题】使用 Gdk Cairo 上下文绘制椭圆【英文标题】:Drawing Oval with Gdk Cairo Context 【发布时间】:2012-01-09 02:35:16 【问题描述】:

我只想画一个椭圆的周长。我用这个:

gc->save();
gc->translate( xc, yc );
gc->arc( 0.0, 0.0, 1.0, 0.0, 2.0*M_PI );
gc->scale( width*0.5, height*0.5 );
gc->stroke();
gc->restore();

但我经常得到一个填充的椭圆形。我做错了什么?

【问题讨论】:

【参考方案1】:

好吧,您对scale() 的调用可能没有达到您的预期。我不确定你是否不小心把调用的顺序弄错了,或者你不太明白 cairo 的转换是如何工作的。如果是后者:

转换仅影响以下操作。而且它们只会以某种方式影响涉及坐标或大小的操作。在这种情况下,您可能希望将其应用于圆弧。然而,它实际上只是被应用到了笔画上,而且很可能是以一种你不想要的方式。

知道我提到变换如何影响涉及坐标或大小的操作吗?好吧,这可能并不明显,但笔画确实隐含涉及大小:即笔画大小。因此,您的圆弧的笔划大小在 x 轴上按 width * 0.5 缩放,在 y 轴上按 height * 0.5 缩放。换句话说,笔触太大了,看起来像一个填充物。

有趣的是,即使您的圆弧实际上不受 scale() 的影响,这意味着您会得到一个圆形而不是椭圆形,但由于笔划的缩放方式,您仍然会得到一个椭圆形。

所以,要解决您的问题:

致电scale() 之前 arc() 在调用arc() 之后但在调用stroke() 之前重置比例因子,这样你就不会再次遇到可怕的中风了

【讨论】:

以上是关于使用 Gdk Cairo 上下文绘制椭圆的主要内容,如果未能解决你的问题,请参考以下文章

gjs cairo 上下文绘图未显示在杂乱的窗口中

如何更改灰度图像的 cairo 上下文源颜色

cairo / gdk / gtk 中是不是支持 HSV 颜色模型?

如何转置 cairo 上下文或更改轴的方向?

iOS 图形绘制(二)-UIBezierPath

Gtk+:如何从 Cairo 上下文中设置窗口的光标?