Help us shape the future of Go! Take the 2026 Go Developer Survey

paint

package
v0.1.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 30, 2026 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Overview

Package paint 解析 OFD 绘制样式、颜色空间与着色渐变,并管理文档级颜色缓存。

本包通过 Resources 读取颜色空间和 Profile,不依赖 render、drawing 或 parser。 页面编排、图元样式应用、坐标变换的选择与离屏绘制由 render 负责。 本包解析有效路径样式,并按调用方传入的坐标变换适配渐变;采样坐标与着色区域 必须使用相同的单位和坐标系。

每个文档视图持有独立的 Resolver,零值可用且支持并发访问,结束时调用 Close。 输入的资源模型和输出的共享渐变均视为只读;Resolve 返回独立画笔值,修改其 字段不会污染缓存。颜色缓存和渐变内部结构在本包测试,光栅、PDF 与文字提取 的集成验证由 render 负责。

Index

Constants

View Source
const DefaultLineWidth = 0.353

DefaultLineWidth 是未指定线宽时的毫米值,见 GB/T 33190—2016 §8.2 表21。

Variables

This section is empty.

Functions

func DeviceGradient

func DeviceGradient(gradient geom.Gradient, matrix geom.Matrix) (geom.Gradient, bool)

DeviceGradient 将 Boundary 空间渐变适配到已烘焙变换的设备空间轮廓。 matrix 将 Boundary 坐标映射到设备坐标;原矩阵、逆矩阵非有限, 或行列式非有限及为零时返回 false。

func HasColorValue

func HasColorValue(source *models.CTColor) bool

HasColorValue 判断颜色元素是否携带实际颜色信息。空元素等价于未指定, 应回退到 DrawParam 的颜色。

func LineCapper

func LineCapper(capStr string) geom.Capper

LineCapper 将 OFD 端点样式转换为几何端点,缺省为 Butt。

func LineJoiner

func LineJoiner(joinStr string) geom.Joiner

LineJoiner 将 OFD 连接样式转换为几何连接,缺省为 Miter。

func MapNativeGradient

func MapNativeGradient(gradient geom.Gradient, matrix geom.Matrix) geom.Gradient

MapNativeGradient 将 Boundary 渐变换算到局部空间,matrix 将局部坐标映射到 Boundary。 返回独立的原生渐变并共享只读色标;几何无法精确表达时返回 nil,供调用方走采样回退。

func NeedsRaster

func NeedsRaster(gradient geom.Gradient, objectAlpha *uint8) bool

NeedsRaster 判断路径渐变是否需要栅格化以保留采样及透明度语义。 canvas 的 PDF 着色只写 DeviceRGB,无法保留色标 Alpha;SVG 也不能表达 路径渐变的单向延伸。Repeat/Reflect、椭圆和焦点径向因此使用采样路径。

func NewGouraudGradient

func NewGouraudGradient(shd *models.CTGouraudShd, transform func(models.StPos) geom.Point, area *geom.Rect, resolve func(models.CTColor) color.RGBA) geom.Gradient

NewGouraudGradient 创建不规则三角网格形式的 Gouraud 渐变。 area 指定着色区域,使区域内未被控制点覆盖的部分按边缘颜色延续;nil 表示未指定。

func NewLatticeGradient

func NewLatticeGradient(shd *models.CTLaGouraudShd, transform func(models.StPos) geom.Point, area *geom.Rect, resolve func(models.CTColor) color.RGBA) geom.Gradient

NewLatticeGradient 创建规则网格形式的 Gouraud 渐变。 每个相邻的四个顶点沿对角线拆分为两个三角形。 area 指定着色区域,使区域内未被控制点覆盖的部分按边缘颜色延续;nil 表示未指定。

func NewLinearGradient

func NewLinearGradient(shd *models.CTAxialShd, transform func(models.StPos) geom.Point, resolve func(models.CTColor) color.RGBA) geom.Gradient

NewLinearGradient 按 OFD 轴向着色语义构造渐变,resolve 为 nil 时使用默认 RGB 颜色。

func NewRadialGradient

func NewRadialGradient(shd *models.CTRadialShd, transform func(models.StPos) geom.Point, resolve func(models.CTColor) color.RGBA) geom.Gradient

NewRadialGradient 按 OFD 径向着色语义构造渐变,保留延伸、重复和椭圆映射。

func NormalizeLineWidth

func NormalizeLineWidth(value float64) float64

NormalizeLineWidth 保留现有回退规则:零值、负数、非有限值及过大值使用默认线宽。

func PrepareDashPattern

func PrepareDashPattern(pattern *models.StArrayF, lineCap string, scale float64) *models.StArrayF

PrepareDashPattern 按对象 CTM 缩放虚线数组,并保留圆端点的零长度点划。 无需调整时返回原数组;调整时复制,返回数组按只读使用。

func ResolvePathStyle

func ResolvePathStyle(object models.CtPath, inherited *models.DrawParam, strokeScale float64) models.CtPath

ResolvePathStyle 按 GB/T 33190—2016 §8.2 的就近原则解析路径绘制属性, 并将描边长度换算到页面坐标。inherited 应已完成 DrawParam.Relative 解析。 保留现有零值回退规则;输入模型及数组不被修改,返回值中的共享资源只读。

func ScaleAlpha

func ScaleAlpha(c color.RGBA, opacity uint8) color.RGBA

ScaleAlpha 按不透明度缩放颜色。color.RGBA 是预乘格式(canvas 会反预乘还原), 因此不能只改 A:必须经非预乘的 NRGBA 正确换算,否则半透明的浅色会被反预乘 放大成白色而不可见(例如 Alpha=51 的浅灰水印会变成白色)。

func ScaleOpacity

func ScaleOpacity(gradient geom.Gradient, opacity uint8) geom.Gradient

ScaleOpacity 返回按不透明度缩放的渐变,不修改原渐变和共享色标。

func StrokeJoiner

func StrokeJoiner(join string, miterLimit, lineWidth float64) geom.Joiner

StrokeJoiner 将绝对毫米的 MiterLimit 换算成后端使用的半线宽倍率。

func StrokeScale

func StrokeScale(objectCTM, parentCTM *models.CTM) float64

StrokeScale 返回对象与父级 CTM 对描边长度的缩放系数 sqrt(|det|)。 路径坐标展平后,线宽、虚线与斜接限制仍需按此系数换算。

func TextRunGradient

func TextRunGradient(gradient geom.Gradient, origin geom.Point, hScale float64) geom.Gradient

TextRunGradient 把 Boundary 空间渐变映射到文字 run 的字体空间。 origin 使用 Boundary 空间的毫米坐标;字体空间以基线为原点,Y 向上。 调用方负责将 HScale 计入 run 原点位移,本函数只缩放字形内的横坐标。

func TranslateGradient

func TranslateGradient(gradient geom.Gradient, dx, dy float64) geom.Gradient

TranslateGradient 将页面渐变适配到原点位于 (dx,dy) 的局部画布。

func ValidDashPattern

func ValidDashPattern(offset float64, pattern *models.StArrayF) bool

ValidDashPattern 校验虚线偏移、长度及元素数量,并要求至少一段有实际长度。

Types

type Color

type Color struct {
	Value    color.RGBA
	HasValue bool
	Gradient geom.Gradient
}

Color 是解析后的画笔颜色,包含固定颜色值或只读共享的渐变。 HasValue 区分未指定颜色与完全透明的颜色。

type Resolver

type Resolver struct {
	// contains filtered or unexported fields
}

Resolver 持有单个文档视图的颜色缓存,零值可用且支持并发调用。 资源和颜色模型在使用期间必须保持只读;使用结束后调用 Close。 首次使用后不可复制,同一实例始终使用同一份文档资源。

func (*Resolver) Close

func (p *Resolver) Close()

Close 清空缓存,并阻止在途构建重新发布结果;可重复调用。

func (*Resolver) Gradient

func (p *Resolver) Gradient(source *models.CTColor, transform func(models.StPos) geom.Point, area *geom.Rect, resources Resources) geom.Gradient

Gradient 构造渐变。transform 将局部控制点映射到采样空间,area 是局部着色区域, 用于网格渐变在区域内延续边缘颜色;不清楚区域时传 nil。

func (*Resolver) RGBA

func (p *Resolver) RGBA(source models.CTColor, resources Resources) color.RGBA

RGBA 解析 CTColor。颜色空间为 GRAY/RGB/CMYK 时按对应分量解释, 存在调色板且未给出 Value 时按 Index 取色。未引用颜色空间时沿用默认的 RGB/RGBA 语义。

func (*Resolver) Resolve

func (p *Resolver) Resolve(source *models.CTColor, resources Resources) *Color

Resolve 返回独立的画笔值;渐变只读共享,同一颜色的并发构建只执行一次。 关闭后返回 nil,关闭前已开始的构建仍可完成,但不再进入缓存。

func (*Resolver) ResolveSolid

func (p *Resolver) ResolveSolid(source *models.CTColor, resources Resources) *Color

ResolveSolid 只准备路径样式的普通颜色,将着色渐变延迟到按 Boundary 放置时构建。

func (*Resolver) TextGradient

func (p *Resolver) TextGradient(source *models.CTColor, objectAlpha *uint8, resources Resources) geom.Gradient

TextGradient 为矢量后端的文字构造可写成 PDF 原生 Shading 的渐变: Direct 轴向渐变与非焦点径向渐变转为带 Extend 位的原生 Linear/RadialGradient, 从而让文字保留真实文本 + 原生 /Shading(PDF 中可复制)。Repeat/Reflect、 椭圆、焦点径向等无法原生表达时返回 nil,由调用方走栅格化。

type Resources

type Resources interface {
	GetColorSpace(id models.StID) *models.ColorSpace
	ReadColorProfile(name string) ([]byte, error)
}

Resources 提供当前文档的颜色空间和 Profile 原始数据。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL