FS_MATRIX を包む可変の OO ラッパーです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 | 単位行列、6 値の行列、または FS_MATRIX からの防御的コピーを作成します |
NewTranslation | 新しい平行移動行列を作成します |
NewScale | 新しい非均一スケール行列を作成します |
NewRotation | 度またはラジアンで、時計回りまたは反時計回りの回転行列を作成します |
NewSkew | X と Y で別々のシアー角を持つ行列を作成します |
NewRectMapping | ソース矩形を宛先矩形の中へ stretch、contain、cover する行列を作成します |
TryCreateRectMapping | FS_MATRIX マッピングを返し、オブジェクトを割り当てることなく、ゼロサイズ、非有限、オーバーフローの入力を拒否します |
Reset | 行列を単位行列へリセットします |
SetElements | 6 つの行列要素をすべて 1 回の呼び出しで置き換えます |
Assign | 別の TPdfMatrix または生の FS_MATRIX をこのインスタンスへコピーします |
Clone | 独立したオブジェクトコピーを作成します |
Determinant | 線形 2 x 2 成分の行列式を返します |
IsFinite | すべての要素が有限の Single 値であるかどうかを報告します |
IsIdentity | 呼び出し側が選択できる許容誤差で単位行列かどうかを検査します |
IsInvertible | 逆行列を計算せずに、有限かつスケールを考慮した可逆性を検査します |
IsTranslationOnly | 線形成分が単位行列かどうかを検査します |
IsAxisAligned | 矩形が軸に整列したままかどうかを検査します。許容誤差内の 90 度単位の回転も含みます |
NearlyEquals | 許容誤差を使って TPdfMatrix または FS_MATRIX と比較します |
GetTranslation | X と Y の平行移動要素をまとめて読み取ります |
SetTranslation | 線形成分を保持したまま X と Y の平行移動を置き換えます |
ClearTranslation | 両方の平行移動要素をゼロにします |
TryDecompose | 行列が正則である場合、平行移動、符号付きスケール、時計回りの回転、シアー、行列式、反射の状態を抽出します |
Multiply | 別の TPdfMatrix または明示的な a から f までの値で後から乗算します |
PreMultiply | 別の TPdfMatrix または明示的な 6 値行列で前から乗算します |
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 | 正規化された矩形の間の stretch、contain、cover のマッピングを後に追加します |
Invert | 行列をその逆行列で置き換えます。特異な場合は EPdfMatrixError を発生させます |
TryInvert | 行列をその逆行列で置き換えます。特異または準特異の場合は状態を変更せず False を返します |
TryGetInverse | このインスタンスを変更せずに逆の FS_MATRIX を計算します |
InverseCopy | 独立した逆行列を作成します。特異な場合は EPdfMatrixError を発生させます |
TransformPoint | PDF の行ベクトル規約に従って座標をアフィン変換へ通します |
TransformVector | 平行移動を無視するよう、方向を線形成分だけへ通します |
TryInverseTransformPoint | 行列を割り当てずに点を逆変換へ通し、特異な変換では False を報告します |
InverseTransformPoint | 点を逆変換へ通します。特異な場合は EPdfMatrixError を発生させます |
TransformQuad | FS_QUADPOINTSF 値の 4 つの点すべてをマップします |
TransformPoints | 点の配列を 1 回の結果割り当てでマップします |
TransformPointsInPlace | 点の配列を、追加の配列を割り当てずに呼び出し側所有のストレージ内でマップします |
TryTransformBounds | 変換された点の外接範囲を 1 パスで累積し、空の入力に対しては False を返します |
TransformBounds | 変換された点の外接範囲を 1 パスで累積します。空の入力に対しては EPdfMatrixError を発生させます |
TransformRect | 矩形を正規化し、正確な軸整列の高速経路またはタイトな 4 隅の外接範囲でマップします |
TransformRects | 矩形の配列を 1 回の結果割り当てでマップします |
TransformRectsInPlace | 矩形の配列を、追加の配列を割り当てずに呼び出し側所有のストレージ内でマップします |
| プロパティ | 型 | 説明 |
|---|---|---|
a | Single | 読み取り専用の第 1 行列要素 |
b | Single | 読み取り専用の第 2 行列要素 |
c | Single | 読み取り専用の第 3 行列要素 |
d | Single | 読み取り専用の第 4 行列要素 |
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 で独立したスケーリングを許します
点と矩形の一括メソッドは出力配列を 1 つだけ割り当て、その場で処理するバリアントは割り当てを行いません。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;