|
Deklaruje przestrzeń kolorów Separation PDF 1.3+ (ISO 32000-1 8.6.6.4), której transformacja tint jest próbkowaną tabelą wyszukiwania Function Type 0 (ISO 32000-1 7.10.2). Użyj tego, gdy krzywa koloru farby spot jest nieliniowa - rampy tint w stylu PANTONE Hexachrome, krzywe gęstości z korekcją gamma, ręcznie rysowane krzywe tonalne zgodne z charakterystyką prasy, LUT ICC konwersji sRGB-to-spot bez pełnej infrastruktury profilu ICC. Dla prostej liniowej rampy od zera do pojedynczego punktu końcowego koloru o pełnej sile nadal obowiązuje punkt wejścia v2.45.0 RegisterSeparation
Delphi syntax:
function RegisterSeparationLUT(const ColorantName: AnsiString; const AlternateCS: AnsiString; const Samples: array of byte): AnsiString;
C++ syntax:
AnsiString RegisterSeparationLUT(const AnsiString& ColorantName, const AnsiString& AlternateCS, const unsigned char* Samples, int SamplesCount);
Opis
HotPDF internally calls RegisterSampledFunction to build the Function Type 0 stream with /Domain [0 1], /Range covering each alt-CS channel in [0, 1], /Size [S] where S = Length(Samples) / M, /BitsPerSample 8 and /Order 1 (linear interpolation). The function is wired into a fresh [/Separation /ColorantName /AltCS <FuncRef>] colour-space array shared across pages, matching the layout RegisterSeparation produces - downstream SetFillColorSpace + SetFillColor code paths see no API surface change between the two registrar variants.
ColorantName - PDF Name of the ink (e.g. 'PANTONE 185 C', 'CutContour', 'White'). Spaces are escaped to #20 per PDF 1.7 7.3.5 by the existing name-writer path.
AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3), or 'DeviceCMYK' (M = 4). The sample stream supplies M output bytes per grid point. Any other value raises an exception.
Samples - raw 8-bit sample bytes ordered (c0_0, c1_0, ..., cM-1_0, c0_1, ..., cM-1_S-1) for S grid points. Length(Samples) must be a positive multiple of M; S is inferred as Length(Samples) / M and must be at least 2 so the function has interpolable range. Linear interpolation between grid points is the default (PDF 1.7 /Order 1).
Wartość zwracana: automatycznie wygenerowana nazwa przestrzeni kolorów (Sep1, Sep2, ...). Wpis Separation jest współdzielony z rejestrem RegisterSeparation v2.45.0, więc nazwy rosną monotonicznie w obu wariantach. Zwraca pusty ciąg, gdy StrictVersionLock jest włączone, a aktywna Version jest niższa niż PDF 1.3 (w przeciwnym razie wersja dokumentu automatycznie podnosi się do 1.3)
Code Example
// 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;
Zobacz też
RegisterSeparation, RegisterSampledFunction, RegisterDeviceN, Version, PDF Filter Support
|