|
Declareert een PDF 1.3+ Separation-kleurruimte (ISO 32000-1 8.6.6.4) waarvan de tint transform een Function Type 0 sampled lookup table is (ISO 32000-1 7.10.2). Gebruik dit wanneer de kleurcurve van de spotinkt niet-lineair is - PANTONE Hexachrome-achtige tintverlopen, met gamma gecorrigeerde dichtheidscurves, met de hand getekende tooncurves die overeenkomen met een drukkarakterisering, sRGB-naar-spot conversie ICC LUT's zonder de volledige ICC-profielmachinerie. Voor de eenvoudige lineaire helling van nul naar één enkel kleureindpunt op volledige sterkte blijft het v2.45.0 RegisterSeparation-ingangspunt van toepassing.
Delphi-syntaxis:
function RegisterSeparationLUT(const ColorantName: AnsiString; const AlternateCS: AnsiString; const Samples: array of byte): AnsiString;
C++-syntaxis:
AnsiString RegisterSeparationLUT(const AnsiString& ColorantName, const AnsiString& AlternateCS, const unsigned char* Samples, int SamplesCount);
Beschrijving
HotPDF roept intern RegisterSampledFunction aan om de Function Type 0-stream te bouwen met /Domain [0 1], /Range dat elk alt-CS-kanaal in [0, 1] afdekt, /Size [S] waarbij S = Length(Samples) / M, /BitsPerSample 8 en /Order 1 (lineaire interpolatie). De functie wordt gekoppeld aan een nieuwe [/Separation /ColorantName /AltCS <FuncRef>]-kleurruimte-array die over pagina's wordt gedeeld, in overeenstemming met de indeling die RegisterSeparation oplevert - downstream codepaden van SetFillColorSpace + SetFillColor zien tussen de twee registrarvarianten geen API-wijziging
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).
Retourwaarde: een automatisch gegenereerde kleurruimtenaam (Sep1, Sep2, ...). De Separation-invoer wordt gedeeld met het v2.45.0 RegisterSeparation-register, zodat namen monotoon oplopen over de twee varianten. Geeft een lege tekenreeks terug wanneer StrictVersionLock is ingeschakeld en de actieve Version lager is dan PDF 1.3 (anders wordt de documentversie automatisch opgewaardeerd naar 1.3)
Codevoorbeeld
// 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;
Zie ook
RegisterSeparation, RegisterSampledFunction, RegisterDeviceN, Version, PDF-filterondersteuning
|