|
THotPDF.RegisterSampledFunction
|
Hore |
|
Deklaruje nepriamy streamový objekt PDF 1.3+ Function Type 0 (Sampled) (ISO 32000-1 7.10.2). Sampled funkcie vyjadrujú ľubovoľné mapovanie vstup-výstup ako pravidelnú N-rozmernú mriežku M-rozmerných výstupných vzoriek; renderer lineárne interpoluje medzi bodmi mriežky pri vyhodnocovaní medzivstupov. Použite to vtedy, keď je mechanika ICC profilu zbytočne ťažká, ale chcete ručne ladenú lookup tabuľku - tónové krivky pre /TransferFunction (ExtGState /TR), sampled tint transformácie pre /Separation alebo /DeviceN (alternatíva k lineárnej ceste Type 2 / aritmetickej ceste Type 4), krivky prahu poltónu alebo akýkoľvek iný PDF konštrukt, ktorý prijíma slovník Function
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);
Opis Funkcia sa emitne ako nepriamy stream s /FunctionType 0, dodanými položkami /Domain, /Range, /Size, /BitsPerSample a /Order spolu so surovým bitovo zabaleným streamom vzoriek. /Encode a /Decode sa vynechajú, takže platia predvolené hodnoty špecifikácie: /Encode mapuje každý koncový bod Domain na rozsah mriežky [0..Size[i]-1] a /Decode zodpovedá /Range (vzorky sa rozbalia na celé čísla a lineárne premapujú späť na konce Range). Pri viacvstupových funkciách poradie bajtov vzoriek sleduje pravidlo PDF 1.7 "input coordinates increase fastest along the first input dimension", teda bajtový offset pre bod mriežky (i_0, i_1, ..., i_{N-1}) s M výstupmi je ((((i_{N-1} * Size[N-2] + i_{N-2}) * ...) * Size[0] + i_0) * M * BitsPerSample / 8 Order - voliteľné, predvolene 1. Prijíma 1 (lineárna interpolácia, predvolené v PDF 1.7) alebo 3 (kubická spline interpolácia) podľa tabuľky 38 v PDF 1.7. Kubická verzia dáva hladšie prechody pri nízkej hustote vzorkovacej mriežky, napríklad pri 17-bodových ICC tónových krivkách, ale niektoré staršie mobilné čítačky potichu prejdú na lineárnu interpoláciu, keď narazia na hodnotu Order, ktorú neimplementujú. Dostupné od HotPDF v2.54.0 For ASCII-input use cases - the typical authoring path - a single 1-input / M-output function with
Domain - 2N hodnôt Single usporiadaných ako [in0Min in0Max in1Min in1Max ...]. Funkcia pred interpoláciou oreže prichádzajúce hodnoty na tento rozsah. N sa určí ako Length(Domain) div 2 Range - 2M hodnôt Single s rovnakým tvarom pre M výstupných rozmerov; výstupné vzorky sa po dekódovaní orežú na tento rozsah Size - N celých čísel udávajúcich počet bodov mriežky na každej vstupnej osi. Length(Size) musí byť rovné N. Celkový počet bodov mriežky je súčin všetkých položiek Size BitsPerSample - jedna z hodnôt 1, 2, 4, 8, 12, 16, 24 alebo 32 podľa tabuľky 38 v PDF 1.7. 8 je ergonomická voľba (surový bajtový stream); 16 až 32 sú bajtovo zarovnané big-endian šírky; 1 / 2 / 4 / 12 vyžadujú bitové balenie MSB-first s posledným bajtom vyplneným nulami po hranicu bajtu. Akákoľvek iná hodnota vyvolá výnimku Samples - surový bitovo zabalený stream vzoriek. Dĺžka musí byť aspoň ceil(GridPoints * M * BitsPerSample / 8) bajtov. HotPDF skopíruje dodané bajty verbatim do nepriameho streamového objektu; správnosť bitového balenia je zodpovednosťou volajúceho
Návratová hodnota: nepriamy THPDFStreamObject, aby ho volajúci mohli pripojiť všade tam, kde sa očakáva slovník Function (zvyčajne odovzdaním jeho nepriamej referencie do iného slovníka cez AddValue alebo do buildera tieňovania / separation). Objekt vlastní zoznam IndirectObjects dokumentu a uvoľní sa na konci dokumentu. Vracia nil, keď je StrictVersionLock zapnutý a aktívna Version je pod PDF 1.3 (inak sa verzia dokumentu automaticky zvýši na 1.3)
Code Example
See Also RegisterAxialGradient, RegisterDeviceN, RegisterSeparation, Version, PDF Filter Support
|