如何在 Cairo/Gtk 中绘制圆角图像?

发布于 2024-10-02 16:25:41 字数 34 浏览 3 评论 0原文

如何在 Cairo/Gtk 中绘制圆角图像?任何语言。

How can I draw image with rounded corners in Cairo/Gtk? In any language.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绳情 2024-10-09 16:25:41

好吧,这真的很简单。这是vala代码:

private void draw_rounded_path(Context ctx, double x, double y,
    double width, double height, double radius) {

    double degrees = M_PI / 180.0;

    ctx.new_sub_path();
    ctx.arc(x + width - radius, y + radius, radius, -90 * degrees, 0 * degrees);
    ctx.arc(x + width - radius, y + height - radius, radius, 0 * degrees, 90 * degrees);
    ctx.arc(x + radius, y + height - radius, radius, 90 * degrees, 180 * degrees);
    ctx.arc(x + radius, y + radius, radius, 180 * degrees, 270 * degrees);
    ctx.close_path();
}

和expose_event的示例:

public override bool expose_event(Gdk.EventExpose event) {
    //base.expose_event(event);
    Context ctx = Gdk.cairo_create(this.window);

    draw_rounded_path(ctx, allocation.x, allocation.y, allocation.width,
        allocation.height, 5);

    if(pixbuf != null) {
        Gdk.cairo_set_source_pixbuf(ctx, pixbuf, allocation.x, allocation.y);
        ctx.clip();
    }

    ctx.paint();
    return false;
}

Ok, it's realy simple. Here is vala code:

private void draw_rounded_path(Context ctx, double x, double y,
    double width, double height, double radius) {

    double degrees = M_PI / 180.0;

    ctx.new_sub_path();
    ctx.arc(x + width - radius, y + radius, radius, -90 * degrees, 0 * degrees);
    ctx.arc(x + width - radius, y + height - radius, radius, 0 * degrees, 90 * degrees);
    ctx.arc(x + radius, y + height - radius, radius, 90 * degrees, 180 * degrees);
    ctx.arc(x + radius, y + radius, radius, 180 * degrees, 270 * degrees);
    ctx.close_path();
}

and example of expose_event:

public override bool expose_event(Gdk.EventExpose event) {
    //base.expose_event(event);
    Context ctx = Gdk.cairo_create(this.window);

    draw_rounded_path(ctx, allocation.x, allocation.y, allocation.width,
        allocation.height, 5);

    if(pixbuf != null) {
        Gdk.cairo_set_source_pixbuf(ctx, pixbuf, allocation.x, allocation.y);
        ctx.clip();
    }

    ctx.paint();
    return false;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文