• cario库


    编译

    用法

    名词

    path(路径)   stroke(描边)   fill(填充)   mask(蒙板)

    接口

    # 创建和销毁surface
    cairo_image_surface_create                   // 内部内存创建图片surface
    cairo_image_surface_create_for_data  // 外部内存创建图片surface
    cairo_surface_destroy                             // 销毁surface

    # 创建和销毁cario上下文
    cairo_createcairo_destroy

    # 设置绘制参数
    cairo_set_operator         // 设置混合模式,默认CAIRO_OPERATOR_OVER
    cairo_set_antialias          // 设置绘制抗锯齿效果,CAIRO_ANTIALIAS_BEST
    cairo_set_source_rgb    // 设置绘制颜色(0.0到1.0范围)
    cairo_set_source_rgba  // 设置绘制颜色,包含不透明度

    # 设置绘制线条参数
    cairo_set_line_cap         // 设置绘制线条两端处理,xxx_CAP_ROUND表示圆滑
    cairo_set_line_join         // 设置绘制线条衔接处理,xxx_JOIN_ROUND表示圆滑
    cairo_set_dash               // 设置绘制线条虚线模型

    # 绘制函数
    cairo_move_to               // 设置绘制线条起点(或贝塞尔曲线的起点)
    cairo_rel_move_to        // 功能同上,采用的相对坐标,相对上一个参考点
    cairo_line_to                  // 设置绘制直线终点
    cairo_curve_to              // 设置绘制三次贝塞尔曲线(前两个参数是控制点最后是终点)
    cairo_rectangle             // 构建矩形路径
    cairo_arc​​​​​​​​​​​​​​​​​​​​​                        // 构建圆弧路径

    # 渲染函数
    cairo_stroke_preserve // 渲染cario上下文中的路径,没有清理path
    cairo_stroke                  // 渲染cario上下文中的路径,同时清理path
    cairo_fill                         // 填充path(非闭合path适用,前提path存在)
    cairo_paint​​​​​​                    // source里的pattern或其他渲染出来
    cairo_mask                    // source和mask混合渲染出来

    # 工具函数
    cairo_format_stride_for_width   // 获取图像格式的stride
    cairo_stroke_extents                   // 获取路径最佳闭合矩形
    cairo_in_stroke                             // 判断点是否在路径内部

    # 输出相关
    cairo_surface_write_to_png       // 将surface输出为png图片

    原理

    多点构造路径path,路径描边stroke,路径填充fill;(绘制和渲染分离)

    实例

    1. // 直接原图上操作
    2. cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
    3. // dash
    4. double dashed[] = {1.0, 2.0, 4.0, 8.0};
    5. int len = sizeof(dashed) / sizeof(dashed[0]);
    6. cairo_set_dash(cr, dashed, len, 0);
    7. cairo_set_dash(cr, NULL, 0, 0);
    8. // 产生临时surface
    9. #define M_PI 3.1415926
    10. cairo_push_group(cr);
    11. cairo_set_source_rgba (cr, 0.8, 0.8, 0.8, 0.6);
    12. cairo_arc(cr, 100, 300, 80, 0.1 * M_PI, 1 * M_PI);
    13. cairo_fill(cr);
    14. cairo_pattern_t* pattern = cairo_pop_group(cr);
    15. cairo_pop_group_to_source(cr);
    16. cairo_set_source(cr, pattern);
    17. cairo_paint (cr);

    参考

    文档:https://www.cairographics.org/manual/index.html

  • 相关阅读:
    网页语音合成API运行无效果问题处理
    钟汉良日记:小白做副业的基本功:阅读
    Leetcode 283. Move Zeroes
    亚马逊小类目排名怎么看?亚马逊小类目是什么意思?——站斧浏览器
    本地yum源-如学
    螺杆支撑座大作用
    学习笔记11--其他相关安全标准与技术
    Excel 文件比较工具 xlCompare 11.01 Crack
    QT实现将两个时间相加的算法[hh: mm + hh: mm]
    【libhv】udp客户端服务器简单例子
  • 原文地址:https://blog.csdn.net/dadan1314/article/details/128011758