FS_MATRIX 的可變 OO 包裝器,用於組合 PDF 使用者空間變換type TPdfMatrix = class ... end;
| Type | Description |
|---|---|
TPdfPointArray | 大量點操作使用的 FS_POINTF 值動態陣列 |
TPdfRectArray | 大量矩形操作使用的 FS_RECTF 值動態陣列 |
TPdfMatrixFitMode | 矩形映射的 pmfStretch、pmfContain 或 pmfCover 貼合策略 |
TPdfMatrixDecomposition | TryDecompose 傳回的平移、帶正負號縮放、順時針旋轉、剪切、行列式與鏡射診斷,存放於 TranslationX、TranslationY、ScaleX、ScaleY、RotationDegrees、ShearDegrees、Determinant 與 IsReflected 欄位 |
| Member | Description |
|---|---|
Create | 建立單位矩陣、六值矩陣,或從 FS_MATRIX 建立防禦性副本 |
NewTranslation | 建立新的平移矩陣 |
NewScale | 建立新的非均勻縮放矩陣 |
NewRotation | 以角度或弧度建立順時針或逆時針旋轉矩陣 |
NewSkew | 建立具有獨立 X 與 Y 剪切角度的矩陣 |
NewRectMapping | 建立將來源矩形延展、內含或覆蓋於目的地矩形內的矩陣 |
TryCreateRectMapping | 傳回 FS_MATRIX 映射,並在不配置物件的情況下拒絕零尺寸、非有限或溢位的輸入 |
Reset | 將矩陣重設為單位矩陣 |
SetElements | 一次呼叫替換全部六個矩陣元素 |
Assign | 將另一個 TPdfMatrix 或原始 FS_MATRIX 複製到這個執行個體 |
Clone | 建立獨立的物件副本 |
Determinant | 傳回線性 2 乘 2 元件的行列式 |
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 | 在呼叫端擁有的儲存區中原地映射矩形陣列,不配置另一個陣列 |
| Property | Type | Description |
|---|---|---|
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 掃描變換後的點而不建構中繼陣列
將 Handle 用於 FPDFPageObj_SetMatrix、FPDFPageObj_Transform 與 FPDFText_SetMatrix 等 API
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;