【问题标题】:How to use cairo to draw rectangle with top left and bottom right cut Corner?如何使用 cairo 绘制具有左上角和右下角切角的矩形?
【发布时间】:2019-09-26 08:58:24
【问题描述】:

我尝试用cairo画一个左上右下切角的矩形,类似于Qt logo。

这就是我想要的: 这是我得到的:

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <cairo.h>

int main()
{
    double height = 500, width = 250;

    cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 500, 500);
    cairo_t *cr = cairo_create (surface);

    cairo_move_to(cr,0,0);
    cairo_line_to(cr,width,0);
    cairo_line_to(cr,width,height - height/4);
    cairo_line_to(cr,width - height/4,height);
    cairo_line_to(cr,0,height);

    cairo_set_line_width (cr, 10.0);
    cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
    cairo_stroke (cr);

    cairo_destroy (cr);
    cairo_surface_write_to_png (surface, "hello.png");
    cairo_surface_destroy (surface);

    return 0;
}

我没有得到我想要的结果,有人可以给小费吗?无论我采用哪种编程语言。

【问题讨论】:

  • 您可能会添加更多详细信息,您的结果有什么问题。在不阅读手册的情况下,我会尝试在开始绘制之前设置线条属性。指定颜色也可能有用。
  • 你能告诉我们你期望的行为是什么,你得到了什么行为?
  • @John 我刚刚编辑了我的帖子,你可以看看吗?
  • @Gerhardh 矩形的边框和背景颜色并不重要,我只是希望有一个看起来像 Qt 徽标的矩形
  • 当我打开创建的文件时,它看起来不像你的形状。我没有关闭左侧,它的高度不同。您的图像似乎失真或使用不同的代码创建

标签: c math drawing cairo pycairo


【解决方案1】:

使用更新后的形状,您只是缺少第一个笔画。 剩下的笔画需要相应地向右移动。

double cutoff = height/4.0;
cairo_move_to(cr, 0, cutoff);
cairo_line_to(cr, cutoff, 0);
cairo_line_to(cr, width + cutoff, 0);
cairo_line_to(cr, width + cutoff, height - cutoff);
cairo_line_to(cr, width, height);
cairo_line_to(cr, cutoff, height);

【讨论】:

  • 谢谢,你对形状有什么建议吗?和计算公式
  • 我对这种形状没有一般规则。我只是将它们画在纸上(有时只是在我的脑海中),标记线条的长度并开始绘制。
猜你喜欢
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2021-01-13
  • 2013-12-22
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多