|
THotPDF.RegisterFreeFormGouraudShading
|
Вверх |
|
Объявляет PDF 1.3+ free-form Gouraud-shaded triangle mesh shading (ISO 32000-1 8.7.4.5.4, /ShadingType 4) и оборачивает его в inline Pattern Type 2 entry в Resources/Pattern dictionary страницы. Используйте возвращенное pattern name с THPDFPage.SetFillPattern или THPDFPage.SetStrokePattern, чтобы рисовать vector gradient с плавным изменением цвета внутри каждого triangle
Delphi syntax: function RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax: Single; NumComponents: Integer; const Vertices: array of Extended): AnsiString;
C++ syntax: AnsiString RegisterFreeFormGouraudShading(float XMin, float YMin, float XMax, float YMax, int NumComponents, const Extended* Vertices, int VertexElementCount);
Описание Shading выводится как единый indirect stream с /ShadingType 4, /BitsPerCoordinate 16, /BitsPerComponent 8 и /BitsPerFlag 8. Каждая vertex упакована в stream order как 8 + NumComponents − 3 bytes: 1-byte flag (всегда 0 для independent triangles), 2 big-endian bytes для X coordinate, 2 big-endian bytes для Y coordinate и NumComponents 8-bit colour components. /Decode array сопоставляет 16-bit coordinates обратно к [XMin, XMax] x [YMin, YMax] user-space rectangle и каждый colour component к [0, 1] Vertices потребляются по три как independent triangles. Число Extended values, переданных в Vertices, должно быть ровно (2 + NumComponents) * 3 * TriangleCount; helper вызывает exception, если длина массива не кратна stride или vertex count не кратен трем
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 — число colour components на vertex. Передайте 1 для DeviceGray, 3 для DeviceRGB или 4 для DeviceCMYK. Любое другое значение вызывает exception. Entry /ColorSpace результирующего shading устанавливается соответственно Vertices — плоский массив Extended values в порядке (X, Y, c1...cN), повторенный для каждой vertex. Coordinates зажимаются в [XMin, XMax] x [YMin, YMax] box и квантируются в 16-bit integers; colour components зажимаются в [0, 1] и квантируются в 8-bit integers. Соседние triangles, которым нужно разделять edge, должны дословно повторять shared vertices, потому что registered shading использует flag 0 для каждой vertex
Возвращаемое значение: автоматически сгенерированное pattern name (Sh1, Sh2, ...), зарегистрированное в Resources/Pattern dictionary текущей страницы. Возвращает empty string, когда StrictVersionLock включен и active Version ниже PDF 1.3; иначе версия документа автоматически повышается до 1.3
Code Example
См. также RegisterDeviceN, RegisterSeparation, RegisterLabColorSpace, Version, PDF Filter Support
|