|
Declares a PDF 1.3+ DeviceN color space backed by N user-supplied spot inks (ISO 32000-1 8.6.6.5). Generalises RegisterSeparation from one colorant to many: six-color printing, metallic / fluorescent inks, custom PDF/X ink mixes, or any N-channel ink set.
Syntaxe Delphi:
function RegisterDeviceN(const ColorantNames: array of AnsiString; const AlternateCS: AnsiString; const TintC1Matrix: array of Extended): AnsiString;
Syntaxe C++:
AnsiString RegisterDeviceN(const AnsiString* ColorantNames, int ColorantNameCount, const AnsiString& AlternateCS, const Extended* TintC1Matrix, int TintC1MatrixCount);
Popis
DeviceN přijímá N operandů tint v rozsahu [0..1], jeden pro každou barvicí složku, a vypočítá M výstupních složek v AlternateCS pomocí lineární vážené směšovací transformace tint, kterou HotPDF interně sestaví jako PostScript-calculator Function Type 4. Výstup pro kanál m je součet přes všechny barvicí složky n z tint[n] * TintC1Matrix[n*M + m], oříznutý renderovacím pipeline na [0..1]
ColorantNames - pole N názvů inkoustů. Každá položka se zapíše jako název PDF; mezery se escapují na #20 podle PDF 1.7 7.3.5. Speciální název 'None' označuje nepoužitý slot barvicí složky. Seznam názvů definuje N vstupních rozměrů výsledného barevného prostoru
AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3) nebo 'DeviceCMYK' (M = 4). Jakákoli jiná hodnota vyvolá výjimku
TintC1Matrix - pole Extended o velikosti N * M v řádkovém pořadí. Řádek n, sloupec m je příspěvek barvicí složky n do kanálu m v AlternateCS při plné síle (tint[n] = 1.0) a všech ostatních hodnotách tint na nule. Length musí být přesně Length(ColorantNames) * M
Vrácená hodnota: automaticky generovaný název (DevN1, DevN2, ...). Vrací prázdný řetězec, když je zapnutý StrictVersionLock a aktivní Verze je pod PDF 1.3 (jinak se verze dokumentu automaticky zvýší na 1.3)
Příklad kódu
// Two-colorant DeviceN over DeviceRGB. Colorant 0 ('Red') is pure
// red at full strength, colorant 1 ('Blue') is pure blue. Mixing
// (0.5, 0.5) yields a 50/50 blend; (1, 1) saturates to magenta
var
CSName: AnsiString;
Mat: array[0..5] of Extended;
begin
HPDF.Version := pdf14;
HPDF.BeginDoc;
Mat[0] := 1.0; Mat[1] := 0.0; Mat[2] := 0.0; // Red row -> (1, 0, 0)
Mat[3] := 0.0; Mat[4] := 0.0; Mat[5] := 1.0; // Blue row -> (0, 0, 1)
CSName := HPDF.RegisterDeviceN(
['Red', 'Blue'], 'DeviceRGB', Mat);
HPDF.CurrentPage.SetFillColorSpace(CSName);
HPDF.CurrentPage.SetFillColor([0.5, 0.5]); // mid-purple
HPDF.CurrentPage.Rectangle(60, 60, 200, 100);
HPDF.CurrentPage.Fill;
HPDF.EndDoc;
end;
Viz také
RegisterSeparation, RegisterLabColorSpace, Verze, PDF Filter Support
|