4

Cairo / Gtkで角が丸い画像を描くにはどうすればよいですか?任意の言語で。

4

1 に答える 1

8

わかりました、それは本当に簡単です。バラコードは次のとおりです。

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;
}
于 2010-11-20T09:09:57.820 に答える