Pattern

Pattern是cairo绘图的颜料,其主要应用时作为所有cairo绘制操作的源,当然也可以用于mask,即画笔。

一个cairo Pattern 由以下列出的任何一个 PatternType 的构造函数来创建,或者可以隐式的通过 Context.set_source_<type>() 方法来创建。

class Pattern()

Pattern 是所有其他pattern类继承的抽象基类,不能直接被实例化。

class cairo.Pattern
get_extend()
返回:绘制 Pattern 时当前的扩展模式( EXTEND 属性 )。
返回类型:int

获取 Pattern 当前的扩展模式。每种扩展模式的详细信息参考 EXTEND 属性

get_matrix()
返回:存储了 Pattern 的仿射变换矩阵信息的类 Matrix
set_extend(extend)
参数:extend – 描述 Pattern 外围区域如何绘制的 EXTEND

设置绘制 Pattern 外围区域时使用的模式。

对于 SurfacePatterncairo.EXTEND_PAD 默认的模式是 cairo.EXTEND_NONE 。 对于 Gradient Pattern 默认的模式时 cairo.EXTEND_PAD

set_matrix(matrix)
参数:matrixMatrix 的实例

设置 Pattern 的变换矩阵为 matrix 。这个矩阵用于从用户空间转换到pattern空间。

Patter 第一次被创建时总是会创建一个唯一的变换矩阵用于其仿射变换,因此 pattern空间和用户空间从一开始就是不同的。

重要: 请注意这个变化矩阵的方向是从用户空间到pattern空间,这意味着如果你想要从 pattern空间到用户空间(即设备空间),那么其坐标变换使用的是 Pattern 矩阵的反转矩阵。

例如,如果你想要创建一个比之前大一倍的 Pattern ,正确的代码应该是:

matrix = cairo.Matrix(xx=0.5,yy=0.5)
pattern.set_matrix(matrix)

如果在上面的代码中使用值2.0代替0.5,会使得 Patter 是原来大小的一半。

另外,需要注意的时用户空间的讨论仅限于 Context.set_source 语义范围内。

class SolidPattern(Pattern)

class cairo.SolidPattern(red, green, blue, alpha=1.0)
参数:
  • red (float) – 颜色的红色组件的值
  • green (float) – 颜色的绿色组件的值
  • blue (float) – 颜色的蓝色组件的值
  • alpha (float) – 颜色的alpha组件的值
返回:

一个新的 SolidPattern 的实例

Raises:

没有内存时触发 MemoryError 异常

使用参数中的半透明颜色创建一个新的 SolidPattern 。颜色组件为0~1的浮点数。 如果传递的参数超过这个范围,则使用最接近该值的范围内的值(clamped)。

get_rgba()
返回:(red, green, blue, alpha) 浮点数元组

获取 SolidPattern 的颜色。

1.4 新版功能.

class SurfacePattern(Pattern)

class cairo.SurfacePattern(surface)
参数:surface – cairo Surface
返回:使用参数surface新创建的 SurfacePattern
Raises:没有内存时触发 MemoryError 异常
get_filter()
返回:当前用于调整 SurfacePatternFILTER
get_surface()
返回:SurfacePatternSurface

1.4 新版功能.

set_filter(filter)
参数:filter – 用于描述如何调整 PatternFILTER

注意:即使你并没有使用 Pattern 时(例如使用 Context.set_source_surface() 时)也想要控制调整的模式。 这种情况下使用 Context.get_source() 来访问 cairo 隐式创建的 pattern 更方便。 例如:

context.set_source_surface(image, x, y)
surfacepattern.set_filter(context.get_source(), cairo.FILTER_NEAREST)

class Gradient(Pattern)

Pattern 是其他pattern类继承的抽象基类,不能直接被实例化。

class cairo.Gradient
add_color_stop_rgb(offset, red, green, blue)
参数:
  • offset (float) – [0.0 .. 1.0] 范围内的偏移值
  • red (float) – 颜色的红色组件的值
  • green (float) – 颜色的绿色组件的值
  • blue (float) – 颜色的蓝色组件的值

Gradient 添加一个不透明的颜色。 offset 为沿着渐变的控制向量的位置点。例如,线性渐变 LinearGradient’s 的控制向量 从 (x0,y0) 到 (x1,y1) ,而径向渐变 RadialGradient’s 的控制向量从圆的起点到圆的终点。

颜色设置方法与 Context.set_source_rgb() 相同。

如果设置了两个(或更多个)点,则所有的停止点会根据添加顺序排序(添加早的点在前)。 这在想要创建尖锐的颜色渐变(sharp color transition)而非混合(blend)渐变时很有用。

add_color_stop_rgba(offset, red, green, blue, alpha)
参数:
  • offset (float) – [0.0 .. 1.0] 范围内的偏移值
  • red (float) – 颜色的红色组件的值
  • green (float) – 颜色的绿色组件的值
  • blue (float) – 颜色的蓝色组件的值
  • alpha – 颜色的alpha组件的值

Gradient 添加一个不透明的颜色。 (译注:原文如此,疑有误) offset 为沿着渐变的控制向量的位置点。例如,线性渐变 LinearGradient’s 的控制向量 从 (x0,y0) 到 (x1,y1) ,而径向渐变 RadialGradient’s 的控制向量从圆的起点到圆的终点。

颜色设置方法与 Context.set_source_rgb() 相同。

如果设置了两个(或更多个)点,则所有的停止点会根据添加顺序排序(添加早的点在前)。 这在想要创建尖锐的颜色渐变(sharp color transition)而非混合(blend)渐变时很有用。

class LinearGradient(Gradient)

class cairo.LinearGradient(x0, y0, x1, y1)
参数:
  • x0 (float) – 起始点的x坐标
  • y0 (float) – 起始点的y坐标
  • x1 (float) – 结束点的x坐标
  • y1 (float) – 结束点的y坐标
返回:

LinearGradient

Raises:

没有内存时触发 MemoryError 异常

根据 (x0, y0) 和 (x1,y1) 确定的直线创建一个新的 LinearGradient 。 在使用 Gradient pattern之前,需要使用 Gradient.add_color_stop_rgb() 或者 Gradient.add_color_stop_rgba() 定义一系列的停止点。

注意: 此处的坐标为pattern空间。对于一个新的 Pattern ,pattern空间与用户空间时不同的, 但是他们之间的关系可以通过 Pattern.set_matrix() 改变。

get_linear_points()
返回:(x0, y0, x1, y1) - 浮点数元组
  • x0: 第一个点的x坐标
  • y0: 第一个点的y坐标
  • x1: 第二个点的x坐标
  • y1: 第二个点的y坐标

获取 LinearGradient 渐变的端点坐标。

1.4 新版功能.

class RadialGradient(Gradient)

class cairo.RadialGradient(cx0, cy0, radius0, cx1, cy1, radius1)
参数:
  • cx0 (float) – 起始圆心的x坐标
  • cy0 (float) – 起始圆心的y坐标
  • radius0 (float) – 起始圆的半径
  • cx1 (float) – 终点圆心的x坐标
  • cy1 (float) – 终点圆心的y坐标
  • radius1 (float) – 终点圆的半径
返回:

新创建的 RadialGradient

Raises:

没有内存时触发 MemoryError 异常

在(cx0, cy0, radius0) 和 (cx1, cy1, radius1) 两个圆之间创建一个新的 RadialGradient 径向渐变pattern。 在使用 Gradient pattern之前,需要使用 Gradient.add_color_stop_rgb() 或者 Gradient.add_color_stop_rgba() 定义一系列的停止点。

注意: 此处的坐标为pattern空间。对于一个新的 Pattern ,pattern空间与用户空间时不同的, 但是他们之间的关系可以通过 Pattern.set_matrix() 改变。

get_radial_circles()
返回:(x0, y0, r0, x1, y1, r1) - 一个浮点数元组
  • x0: 起始圆心的x坐标
  • y0: 起始圆心的y坐标
  • r0: 起始圆的半径
  • x1: 终点圆心的x坐标
  • y1: 终点圆心的y坐标
  • r1: 终点圆的半径

获取 RadialGradient 的端点的圆,每个圆以其圆心坐标和半径表示。

1.4 新版功能.