FS_MATRIX 的可变面向对象包装器,用于组合 PDF 用户空间变换type TPdfMatrix = class ... end;
| 类型 | 说明 |
|---|---|
TPdfPointArray | FS_POINTF 值的动态数组,用于批量点操作 |
TPdfRectArray | FS_RECTF 值的动态数组,用于批量矩形操作 |
TPdfMatrixFitMode | 矩形映射的 pmfStretch、pmfContain 或 pmfCover 适配策略 |
TPdfMatrixDecomposition | 由 TryDecompose 返回的平移、带符号缩放、顺时针旋转、剪切、行列式和反射诊断,位于字段 TranslationX、TranslationY、ScaleX、ScaleY、RotationDegrees、ShearDegrees、Determinant 和 IsReflected 中 |
| 成员 | 说明 |
|---|---|
Create | 创建单位矩阵、六值矩阵,或从 FS_MATRIX 创建防御性副本 |
NewTranslation | 创建新的平移矩阵 |
NewScale | 创建新的非均匀缩放矩阵 |
NewRotation | 以角度或弧度创建顺时针或逆时针旋转矩阵 |
NewSkew | 创建具有独立 X 和 Y 剪切角度的矩阵 |
NewRectMapping | 创建在目标矩形内拉伸、包含或覆盖源矩形的矩阵 |
TryCreateRectMapping | 返回 FS_MATRIX 映射,并在不分配对象的情况下拒绝零尺寸、非有限或溢出的输入 |
Reset | 将矩阵重置为单位矩阵 |
SetElements | 一次调用替换全部六个矩阵元素 |
Assign | 把另一个 TPdfMatrix 或原始 FS_MATRIX 复制到此实例 |
Clone | 创建独立的对象副本 |
Determinant | 返回线性 2x2 分量的行列式 |
IsFinite | 报告每个元素是否都是有限的 Single 值 |
IsIdentity | 使用调用方可选的容差测试单位矩阵 |
IsInvertible | 在不计算逆矩阵的情况下测试有限且考虑缩放的可逆性 |
IsTranslationOnly | 测试线性分量是否为单位矩阵 |
IsAxisAligned | 测试矩形是否保持轴对齐,包括容差内的四分之一圈布局 |
NearlyEquals | 使用容差与 TPdfMatrix 或 FS_MATRIX 比较 |
GetTranslation | 同时读取 X 和 Y 平移元素 |
SetTranslation | 在保留线性分量的同时替换 X 和 Y 平移 |
ClearTranslation | 把两个平移元素都设为零 |
TryDecompose | 当矩阵非奇异时提取平移、带符号缩放、顺时针旋转、剪切、行列式和反射状态 |
Multiply | 右乘另一个 TPdfMatrix 或显式的 a 到 f 值 |
PreMultiply | 左乘另一个 TPdfMatrix 或显式的六值矩阵 |
PreTranslate | 在矩阵的本地输入空间前置一个平移 |
PreScale | 前置独立的 X 和 Y 缩放因子 |
PreRotate | 前置顺时针或逆时针旋转 |
PreSkew | 前置独立的 X 和 Y 剪切角度 |
Translate | 按 deltaX 和 deltaY 追加一个平移 |
Scale | 追加独立的 X 和 Y 缩放因子 |
Rotate | 以角度或弧度追加顺时针或逆时针旋转 |
HorizontalFlip | 追加 X 轴翻转 |
VerticalFlip | 追加 Y 轴翻转 |
CentralFlip | 追加两个轴的翻转,等效于无需三角函数的 180 度旋转 |
Skew | 追加独立的 X 和 Y 剪切角度 |
RotateAt | 围绕保持固定的枢轴追加旋转 |
ScaleAt | 围绕保持固定的枢轴追加缩放 |
SkewAt | 围绕保持固定的枢轴追加剪切 |
HorizontalFlipAt | 围绕调用方选择的 X 坐标追加水平翻转 |
VerticalFlipAt | 围绕调用方选择的 Y 坐标追加垂直翻转 |
CentralFlipAt | 围绕调用方选择的枢轴追加两个翻转 |
MapRectToRect | 在归一化矩形之间追加拉伸、包含或覆盖映射 |
Invert | 用逆矩阵替换该矩阵,奇异时引发 EPdfMatrixError |
TryInvert | 用逆矩阵替换该矩阵,奇异或接近奇异时返回 False 且不做修改 |
TryGetInverse | 在不修改此实例的情况下计算逆 FS_MATRIX |
InverseCopy | 创建独立的逆矩阵,奇异时引发 EPdfMatrixError |
TransformPoint | 使用 PDF 行向量约定通过仿射变换映射坐标 |
TransformVector | 仅通过线性分量映射方向,因此忽略平移 |
TryInverseTransformPoint | 在不分配矩阵的情况下通过逆变换映射点,并将奇异变换报告为 False |
InverseTransformPoint | 通过逆变换映射点,奇异时引发 EPdfMatrixError |
TransformQuad | 映射 FS_QUADPOINTSF 值的全部四个点 |
TransformPoints | 用一次结果分配映射点数组 |
TransformPointsInPlace | 在调用方拥有的存储中映射点数组,而不分配另一个数组 |
TryTransformBounds | 一遍累积变换后的点边界,空输入返回 False |
TransformBounds | 一遍累积变换后的点边界,空输入引发 EPdfMatrixError |
TransformRect | 通过精确的轴对齐快速路径或紧凑四角边界归一化并映射矩形 |
TransformRects | 用一次结果分配映射矩形数组 |
TransformRectsInPlace | 在调用方拥有的存储中映射矩形数组,而不分配另一个数组 |
| 属性 | 类型 | 说明 |
|---|---|---|
a | Single | 只读的第一个矩阵元素 |
b | Single | 只读的第二个矩阵元素 |
c | Single | 只读的第三个矩阵元素 |
d | Single | 只读的第四个矩阵元素 |
e | Single | 只读的平移 X 元素 |
f | Single | 只读的平移 Y 元素 |
Handle | FS_MATRIX | 供接受 FS_MATRIX 或 PFS_MATRIX 的 PDFium API 使用的原始矩阵值 |
TPdfMatrix 使用 PDF 仿射布局 a b c d e f 并对每个操作右乘,因此调用顺序与应用于点的变换顺序一致
PreMultiply 和 Pre* 辅助方法在当前变换之前添加操作,而枢轴辅助方法追加平移-操作-平移序列,使选定的枢轴保持固定
pmfContain 保留完整的源矩形并居中留出未使用空间,pmfCover 以居中的溢出填充目标,而 pmfStretch 允许独立的 X 和 Y 缩放
批量点和矩形方法分配一个输出数组,其就地变体不分配任何数组,而 TryTransformBounds 扫描变换后的点而不构建中间数组
在 FPDFPageObj_SetMatrix、FPDFPageObj_Transform 和 FPDFText_SetMatrix 等 API 中使用 Handle
var
Matrix: TPdfMatrix;
begin
Matrix := TPdfMatrix.Create;
Matrix.ScaleAt(0.5, 0.5, 144, 144);
Matrix.RotateAt(15, 144, 144);
Matrix.Translate(72, 72);
FPDFPageObj_SetMatrix(ObjectHandle, @Matrix.Handle);
end;