|
THotPDF.RegisterTensorProductPatchMesh
|
Вверх |
|
Объявляет PDF 1.3+ tensor product patch mesh shading (ISO 32000-1 8.7.4.5.7, /ShadingType 7) и оборачивает его в inline Pattern Type 2 entry в Resources/Pattern dictionary страницы. Каждый patch — полная 4 x 4 сетка bicubic Bezier control points p[i][j] (12 boundary + 4 interior) плюс один colour на corner. Используйте, когда RegisterCoonsPatchMesh (Type 6) не может выразить interior shape, например для SVG mesh-gradient round-trips и artwork, которому нужны четыре дополнительных control points для изгиба patch interior
Delphi syntax: function RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax: Single; NumComponents: Integer; const Patches: array of Extended): AnsiString;
C++ syntax: AnsiString RegisterTensorProductPatchMesh(float XMin, float YMin, float XMax, float YMax, int NumComponents, const Extended* Patches, int PatchesElementCount);
Описание Shading выводится как indirect stream с /ShadingType 7, /BitsPerCoordinate 16, /BitsPerComponent 8 и /BitsPerFlag 8. Каждый patch упакован как 1 flag byte (всегда 0 для independent patches), затем 16 control points (каждый 4 bytes: 2 big-endian X + 2 big-endian Y в spec stream order ниже) и 4 corner colours (каждый NumComponents bytes), всего 1 + 64 + 4 * NumComponents bytes на patch 16 control points образуют сетку 4 x 4 p[i][j], где i = row index (0 = visual top / YMax, 3 = visual bottom / YMin), а j = column index (0 = left / XMin, 3 = right / XMax). Spec stream order (Table 88) сначала обходит 12 boundary points по часовой стрелке, затем перечисляет 4 interior points по часовой стрелке, начиная с top-left interior point: p[1][1], p[1][2], p[2][2], p[2][1]. User-supplied Patches array следует этому порядку дословно Когда все 16 control points лежат на regular 1/3 / 2/3 lattice, bicubic Bezier surface вырождается в плоскость, а colour interpolation — в bilinear; визуально это идентично RegisterCoonsPatchMesh с прямыми edges или RegisterFreeFormGouraudShading с четырьмя corner vertices
XMin, YMin, XMax, YMax — user-space rectangle, ограничивающий mesh. Эти четыре значения становятся первыми четырьмя entries /Decode, чтобы 16-bit encoded vertex coordinates сопоставлялись обратно в PDF user space. Укажите их в тех же user-space coordinates, куда будете рисовать; для HotPDF screen-coordinate Rectangle at (X, Y, W, H) соответствующий PDF user-space rectangle равен (X, PageHeight - Y - H) to (X + W, PageHeight - Y) NumComponents - количество компонентов цвета на угол. Передайте 1 для DeviceGray, 3 для DeviceRGB или 4 для DeviceCMYK. Любое другое значение вызывает исключение Patches — плоский массив Extended values. Каждый patch вносит 32 + 4 * NumComponents values: 32 floats для 16 control points (X, Y pairs в spec stream order), затем 4 * NumComponents floats для corner colours. Длина массива должна быть положительным кратным этого stride. Все emitted patches несут flag = 0 (independent patch); continuation flags 1 / 2 / 3 не открыты в этом convenience overload
Возвращаемое значение: автоматически сгенерированное pattern name (Sh1, Sh2, ...), зарегистрированное в Resources/Pattern dictionary текущей страницы. Возвращает empty string, когда StrictVersionLock включен и active Version ниже PDF 1.3; иначе версия документа автоматически повышается до 1.3
Code Example
См. также RegisterCoonsPatchMesh, RegisterFreeFormGouraudShading, RegisterLatticeFormGouraudShading, Version, PDF Filter Support
|