Documentation
¶
Overview ¶
Package paint 解析 OFD 绘制样式、颜色空间与着色渐变,并管理文档级颜色缓存。
本包通过 Resources 读取颜色空间和 Profile,不依赖 render、drawing 或 parser。 页面编排、图元样式应用、坐标变换的选择与离屏绘制由 render 负责。 本包解析有效路径样式,并按调用方传入的坐标变换适配渐变;采样坐标与着色区域 必须使用相同的单位和坐标系。
每个文档视图持有独立的 Resolver,零值可用且支持并发访问,结束时调用 Close。 输入的资源模型和输出的共享渐变均视为只读;Resolve 返回独立画笔值,修改其 字段不会污染缓存。颜色缓存和渐变内部结构在本包测试,光栅、PDF 与文字提取 的集成验证由 render 负责。
Index ¶
- Constants
- func DeviceGradient(gradient geom.Gradient, matrix geom.Matrix) (geom.Gradient, bool)
- func HasColorValue(source *models.CTColor) bool
- func LineCapper(capStr string) geom.Capper
- func LineJoiner(joinStr string) geom.Joiner
- func MapNativeGradient(gradient geom.Gradient, matrix geom.Matrix) geom.Gradient
- func NeedsRaster(gradient geom.Gradient, objectAlpha *uint8) bool
- func NewGouraudGradient(shd *models.CTGouraudShd, transform func(models.StPos) geom.Point, ...) geom.Gradient
- func NewLatticeGradient(shd *models.CTLaGouraudShd, transform func(models.StPos) geom.Point, ...) geom.Gradient
- func NewLinearGradient(shd *models.CTAxialShd, transform func(models.StPos) geom.Point, ...) geom.Gradient
- func NewRadialGradient(shd *models.CTRadialShd, transform func(models.StPos) geom.Point, ...) geom.Gradient
- func NormalizeLineWidth(value float64) float64
- func PrepareDashPattern(pattern *models.StArrayF, lineCap string, scale float64) *models.StArrayF
- func ResolvePathStyle(object models.CtPath, inherited *models.DrawParam, strokeScale float64) models.CtPath
- func ScaleAlpha(c color.RGBA, opacity uint8) color.RGBA
- func ScaleOpacity(gradient geom.Gradient, opacity uint8) geom.Gradient
- func StrokeJoiner(join string, miterLimit, lineWidth float64) geom.Joiner
- func StrokeScale(objectCTM, parentCTM *models.CTM) float64
- func TextRunGradient(gradient geom.Gradient, origin geom.Point, hScale float64) geom.Gradient
- func TranslateGradient(gradient geom.Gradient, dx, dy float64) geom.Gradient
- func ValidDashPattern(offset float64, pattern *models.StArrayF) bool
- type Color
- type Resolver
- func (p *Resolver) Close()
- func (p *Resolver) Gradient(source *models.CTColor, transform func(models.StPos) geom.Point, ...) geom.Gradient
- func (p *Resolver) RGBA(source models.CTColor, resources Resources) color.RGBA
- func (p *Resolver) Resolve(source *models.CTColor, resources Resources) *Color
- func (p *Resolver) ResolveSolid(source *models.CTColor, resources Resources) *Color
- func (p *Resolver) TextGradient(source *models.CTColor, objectAlpha *uint8, resources Resources) geom.Gradient
- type Resources
Constants ¶
const DefaultLineWidth = 0.353
DefaultLineWidth 是未指定线宽时的毫米值,见 GB/T 33190—2016 §8.2 表21。
Variables ¶
This section is empty.
Functions ¶
func DeviceGradient ¶
DeviceGradient 将 Boundary 空间渐变适配到已烘焙变换的设备空间轮廓。 matrix 将 Boundary 坐标映射到设备坐标;原矩阵、逆矩阵非有限, 或行列式非有限及为零时返回 false。
func HasColorValue ¶
HasColorValue 判断颜色元素是否携带实际颜色信息。空元素等价于未指定, 应回退到 DrawParam 的颜色。
func LineJoiner ¶
LineJoiner 将 OFD 连接样式转换为几何连接,缺省为 Miter。
func MapNativeGradient ¶
MapNativeGradient 将 Boundary 渐变换算到局部空间,matrix 将局部坐标映射到 Boundary。 返回独立的原生渐变并共享只读色标;几何无法精确表达时返回 nil,供调用方走采样回退。
func NeedsRaster ¶
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 ¶
NormalizeLineWidth 保留现有回退规则:零值、负数、非有限值及过大值使用默认线宽。
func PrepareDashPattern ¶
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 ¶
ScaleAlpha 按不透明度缩放颜色。color.RGBA 是预乘格式(canvas 会反预乘还原), 因此不能只改 A:必须经非预乘的 NRGBA 正确换算,否则半透明的浅色会被反预乘 放大成白色而不可见(例如 Alpha=51 的浅灰水印会变成白色)。
func ScaleOpacity ¶
ScaleOpacity 返回按不透明度缩放的渐变,不修改原渐变和共享色标。
func StrokeJoiner ¶
StrokeJoiner 将绝对毫米的 MiterLimit 换算成后端使用的半线宽倍率。
func StrokeScale ¶
StrokeScale 返回对象与父级 CTM 对描边长度的缩放系数 sqrt(|det|)。 路径坐标展平后,线宽、虚线与斜接限制仍需按此系数换算。
func TextRunGradient ¶
TextRunGradient 把 Boundary 空间渐变映射到文字 run 的字体空间。 origin 使用 Boundary 空间的毫米坐标;字体空间以基线为原点,Y 向上。 调用方负责将 HScale 计入 run 原点位移,本函数只缩放字形内的横坐标。
func TranslateGradient ¶
TranslateGradient 将页面渐变适配到原点位于 (dx,dy) 的局部画布。
Types ¶
type Resolver ¶
type Resolver struct {
// contains filtered or unexported fields
}
Resolver 持有单个文档视图的颜色缓存,零值可用且支持并发调用。 资源和颜色模型在使用期间必须保持只读;使用结束后调用 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 ¶
RGBA 解析 CTColor。颜色空间为 GRAY/RGB/CMYK 时按对应分量解释, 存在调色板且未给出 Value 时按 Index 取色。未引用颜色空间时沿用默认的 RGB/RGBA 语义。
func (*Resolver) ResolveSolid ¶
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,由调用方走栅格化。