|
Deklaruje barevný prostor Separation pro PDF 1.3+ (ISO 32000-1 8.6.6.4), jehož transformace tint je vzorkovaná vyhledávací tabulka Function Type 0 (ISO 32000-1 7.10.2). Použijte to, když je barevná křivka přímého inkoustu nelineární - rampy tint ve stylu PANTONE Hexachrome, gama korigované křivky hustoty, ručně kreslené tónové křivky odpovídající charakterizaci tiskového stroje, ICC LUT pro převod sRGB na přímý inkoust bez plného mechanismu ICC profilu. Pro jednoduchou lineární rampu od nuly k jednomu plně sytému barevnému koncovému bodu stále platí vstupní bod v2.45.0 RegisterSeparation
Syntaxe Delphi:
function RegisterSeparationLUT(const ColorantName: AnsiString; const AlternateCS: AnsiString; const Samples: array of byte): AnsiString;
Syntaxe C++:
AnsiString RegisterSeparationLUT(const AnsiString& ColorantName, const AnsiString& AlternateCS, const unsigned char* Samples, int SamplesCount);
Popis
HotPDF interně volá RegisterSampledFunction, aby sestavil stream Function Type 0 s /Domain [0 1], /Range pokrývajícím každý kanál alt-CS v [0, 1], /Size [S], kde S = Length(Samples) / M, /BitsPerSample 8 a /Order 1 (lineární interpolace). Funkce je zapojena do nového pole barevného prostoru [/Separation /ColorantName /AltCS <FuncRef>] sdíleného napříč stránkami, podle rozvržení, které vytváří RegisterSeparation - navazující kódové cesty SetFillColorSpace + SetFillColor nevidí mezi dvěma variantami registrátoru žádnou změnu povrchu API
ColorantName - PDF Name inkoustu (např. 'PANTONE 185 C', 'CutContour', 'White'). Mezery se existující cestou zápisu názvů escapují na #20 podle PDF 1.7 7.3.5
AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3) nebo 'DeviceCMYK' (M = 4). Stream vzorků dodává M výstupních bajtů na bod mřížky. Jakákoli jiná hodnota vyvolá výjimku
Samples - surové 8bitové bajty vzorků v pořadí (c0_0, c1_0, ..., cM-1_0, c0_1, ..., cM-1_S-1) pro S bodů mřížky. Length(Samples) musí být kladným násobkem M; S se odvodí jako Length(Samples) / M a musí být alespoň 2, aby funkce měla interpolovatelný rozsah. Lineární interpolace mezi body mřížky je výchozí (PDF 1.7 /Order 1)
Vrácená hodnota: automaticky generovaný název barevného prostoru (Sep1, Sep2, ...). Položka Separation je sdílena s registrem v2.45.0 RegisterSeparation, takže názvy monotonně narůstají napříč oběma variantami. 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
// Register a 'HeatLUT' Separation over DeviceRGB whose tint -> RGB
// curve is a 256-sample blue -> green -> red heatmap
var
CSName: AnsiString;
Samples: array[0..767] of byte; // 256 * 3 RGB
I: Integer;
T: Single;
begin
HPDF.BeginDoc;
for I := 0 to 255 do
begin
T := I / 255.0;
if T < 0.5 then
begin
Samples[I*3 + 0] := 0;
Samples[I*3 + 1] := byte(Round(2.0 * T * 255.0));
Samples[I*3 + 2] := byte(Round((1.0 - 2.0*T) * 255.0));
end
else
begin
Samples[I*3 + 0] := byte(Round(2.0 * (T - 0.5) * 255.0));
Samples[I*3 + 1] := byte(Round((1.0 - 2.0*(T - 0.5)) * 255.0));
Samples[I*3 + 2] := 0;
end;
end;
CSName := HPDF.RegisterSeparationLUT('HeatLUT', 'DeviceRGB', Samples);
HPDF.CurrentPage.SetFillColorSpace(CSName);
HPDF.CurrentPage.SetFillColor([0.5]); // midpoint -> pure green
HPDF.CurrentPage.Rectangle(100, 100, 40, 40);
HPDF.CurrentPage.Fill;
HPDF.EndDoc;
end;
Viz také
RegisterSeparation, RegisterSampledFunction, RegisterDeviceN, Verze, PDF Filter Support
|