GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 3643|回复: 0

[转]Cairo 图形指南 (2) —— Cairo 概念

[复制链接]
  • TA的每日心情
    奋斗
    2021-11-19 13:15
  • 签到天数: 20 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2011-2-3 01:53:51 | 显示全部楼层 |阅读模式
       

    本文讲述 Cairo 图形库中一些有用的定义/概念,理解它们可以帮助你更好的理解 Cairo 绘图模型。
    环境 (Context)
    使用 Cairo 绘图,必须要首先创建 Cairo 环境 (Context)。Cairo 环境保存着所有的图形状态参数,这些参数描述了图形的构成,譬如线条宽度、颜色、要绘制的外观 (Surface) 以及其它一些信息。Cairo 环境允许真正的绘图函数使用很少的一部分参数,以此提高接口的易用性。调用 gdk_cairo_create () 函数可为所绘制的图形创建一个 Cairo 环境。
    cairo_t * cr;
    cr = gdk_cairo_create (widget->window);


    这两行代码创建了一个 Cairo 环境,并且这个 Cairo 环境是关联到 GdkDrawable 对象上的。cairo_t 结构体包含了当前渲染设备的状态,也包含了所绘制图形的坐标。从技术上来讲,cairo_t 就是所谓的 Cairo 环境。
    Cairo 所有的绘图函数都要去操作 cairo_t 对象。一个 Cairo 环境可以被关联到一种特定的外观,譬如 pdf、svg、png、GdkDrawable 等。
    GDK 没有对 Cairo API 进行封装,它只允许创建一个可基于 GdkDrawable 对象绘制图形的 Cairo 环境。有一些 GDK 函数可以将 GDK 的矩形或填充区域转换为 Cairo Path (路径),然后使用 Cairo 绘图与渲染。
    路径 (Path)
    一条 Path(路径)通常是由一条或多条首位相接的直线段构成的,也可以由直线段与曲线段构成。路径可分为 Open(开放)类型与 Closed(闭合)类型,前者的首尾端点不重合,后者的首尾端点重合。
    在 Cairo 中,绘图要从一条空路径开始,首先定义一条路径,然后通过绘制/填充操作使之可见。要注意的是,每次调用 cairo_stroke () 或 cairo_fill () 函数之后,路径会被清空,不得不再定义新的路径。
    一条路径可由一些子路径构成。
    源 (Source)
    源好比绘图中所使用的画笔/颜料,使用它来绘制/填充图形轮廓。有 4 种基本的源:color、gradient、pattern 与 image。
    外观 (Surface)
    Surface 就是要绘制图形的最终体现形式,譬如可使用 PDF 或 PostScript 外观实现文本内容的渲染,或者使用 Xlib、Win32 外观实现屏幕绘图。
    Cairo 具体有那些外观类型,可参考其定义:
    typedef enum _cairo_surface_type {
      CAIRO_SURFACE_TYPE_IMAGE,
      CAIRO_SURFACE_TYPE_PDF,
      CAIRO_SURFACE_TYPE_PS,
      CAIRO_SURFACE_TYPE_XLIB,
      CAIRO_SURFACE_TYPE_XCB,
      CAIRO_SURFACE_TYPE_GLITZ,
      CAIRO_SURFACE_TYPE_QUARTZ,
      CAIRO_SURFACE_TYPE_WIN32,
      CAIRO_SURFACE_TYPE_BEOS,
      CAIRO_SURFACE_TYPE_DIRECTFB,
      CAIRO_SURFACE_TYPE_SVG,
      CAIRO_SURFACE_TYPE_OS2
    } cairo_surface_type_t;


    蒙板 (Mask)
    在源作用于外观之前,可对其实现过滤,蒙板 (mask) 即是过滤器。蒙板决定哪些源可被显示。蒙板不透明的部分允许复制源至外观,蒙板透明的部分则禁止复制源至外观。
    图案 (Pattern)
    图案表示被绘制到外观的源。在 Cairo 中,图案是一种可以读取的内容,可用作绘图操作的源或蒙板。图案可以是纯色模式、基于外观的模式以及渐变模式。


    原帖地址:http://liyanrui.is-programmer.com/posts/2335.html


      
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

    申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

    我要啦免费统计

    GMT+8, 2024-12-22 12:22 , Processed in 0.025440 second(s), 7 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表