|
THotPDF.RegisterSampledFunction
|
Горе |
|
Декларира PDF 1.3+ Function Type 0 (Sampled) непряк stream object по ISO 32000-1 7.10.2. Sampled functions описват произволно mapping input-to-output като regular N-dimensional grid от M-dimensional output samples; renderer-ът интерполира линейно между grid точки за изчисляване на междинни inputs. Използвайте това когато ICC profile логиката е прекалено тежка и е нужна ръчно изградена lookup table за tone curves на /TransferFunction (ExtGState /TR), sampled tint transforms за /Separation или /DeviceN (алтернатива на linear Type 2 и arithmetic Type 4 пътища), halftone threshold криви или друго PDF решение, което използва Function dictionary
Delphi syntax: function RegisterSampledFunction(const Domain: array of Single; const Range: array of Single; const Size: array of Integer; BitsPerSample: Integer; const Samples: array of byte; Order: Integer = 1): THPDFStreamObject;
C++ syntax: THPDFStreamObject* RegisterSampledFunction(const float* Domain, int DomainCount, const float* Range, int RangeCount, const int* Size, int SizeCount, int BitsPerSample, const unsigned char* Samples, int SamplesCount, int Order = 1);
Описание Функцията се записва като непряк stream с /FunctionType 0 и подадените /Domain, /Range, /Size, /BitsPerSample и /Order, плюс суров bit-packed sample stream. /Encode и /Decode не се подават, затова важат spec стойностите по подразбиране: /Encode map-ва всеки Domain endpoint към grid extents [0..Size[i]-1], а /Decode съвпада с /Range. samples се unpack-ват до integers и се remap-ват линейно обратно към Range endpoints. За multi-input функции byte order следва правилото на PDF 1.7, че координатите на първия input се увеличават най-бързо, т.е. byte offset за grid point (i_0, i_1, ..., i_{N-1}) с M outputs е ((((i_{N-1} * Size[N-2] + i_{N-2}) * ...) * Size[0] + i_0) * M * BitsPerSample / 8) Order - изборен параметър, default 1. Приема 1 (linear interpolation, PDF 1.7 default) или 3 (cubic-spline interpolation) по PDF 1.7 Table 38. Cubic дава по-гладки преходи при ниска плътност на sample-grid (например 17-point ICC tone curves), но някои по-стари мобилни readers безмълвно fall back към linear когато срещнат Order стойност, която не поддържат. Наличен е от HotPDF v2.54.0 For ASCII-input use cases - the typical authoring path - a single 1-input / M-output function with
Domain - 2N Single values, ordered Range - 2M Single values със същата shape за M output dimensions; output samples се clamped-ват към този range след decoding Size - N integers, които дават grid-point count по всяка input axis. Length(Size) трябва да е равна на N. Общият брой grid points е произведението на всички Size entries BitsPerSample - one of 1, 2, 4, 8, 12, 16, 24, or 32 per PDF 1.7 Table 38. Samples е суровият bit-packed sample stream. Length трябва да е поне ceil(GridPoints * M * BitsPerSample / 8) bytes. HotPDF копира подадените bytes дословно в indirect stream object-а; коректността на bit-pack е отговорност на извикващия
Връщана стойност: индиректният THPDFStreamObject, за да може извикващият да го закачи където е нужно във Function dictionary, обикновено чрез подаване на неговата indirect reference към друг dict през AddValue или към shading / separation builder. Обектът е собственост на документа и е в списъка IndirectObjects; той се освобождава при края на документа. Връща nil, когато StrictVersionLock е включен и активната Version е под PDF 1.3, в противен случай document version се повишава автоматично до 1.3
Примерен код
See Also RegisterAxialGradient, RegisterDeviceN, RegisterSeparation, Version, PDF Filter Support
|