|
Deklariert einen Separation-Farbraum ab PDF 1.3 (ISO 32000-1 8.6.6.4), dessen Tint-Transformation eine gesampelte Lookup-Tabelle der Function Type 0 ist (ISO 32000-1 7.10.2). Verwenden Sie es, wenn die Farbkurve der Sonderfarbe nicht linear ist – Tint-Rampen im Stil von PANTONE Hexachrome, gammakorrigierte Dichtekurven, von Hand gezeichnete Tonwertkurven passend zu einer Druckcharakterisierung, sRGB-nach-Sonderfarbe-ICC-LUTs ohne die volle ICC-Profil-Infrastruktur. Für die einfache lineare Rampe von null bis zu einem einzelnen Farb-Endpunkt bei voller Stärke gilt weiterhin der Einstieg RegisterSeparation aus v2.45.0.
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);
Description
HotPDF ruft intern RegisterSampledFunction auf, um den Function-Type-0-Stream aufzubauen, mit /Domain [0 1], /Range für jeden Kanal des alternativen Farbraums in [0, 1], /Size [S] mit S = Length(Samples) / M, /BitsPerSample 8 und /Order 1 (lineare Interpolation). Die Funktion wird in ein neues Farbraum-Array [/Separation /ColorantName /AltCS <FuncRef>] eingebunden, das seitenübergreifend geteilt wird und dem Layout von RegisterSeparation entspricht – nachgelagerter Code mit SetFillColorSpace + SetFillColor sieht zwischen den beiden Registrierungsvarianten keine Änderung der API-Oberfläche.
ColorantName – PDF-Name der Farbe (z. B. 'PANTONE 185 C', 'CutContour', 'White'). Leerzeichen werden vom vorhandenen Name-Writer gemäß PDF 1.7 7.3.5 zu #20 maskiert.
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 – rohe 8-Bit-Sample-Bytes in der Reihenfolge (c0_0, c1_0, ..., cM-1_0, c0_1, ..., cM-1_S-1) für S Gitterpunkte. Length(Samples) muss ein positives Vielfaches von M sein; S wird als Length(Samples) / M abgeleitet und muss mindestens 2 betragen, damit die Funktion einen interpolierbaren Bereich hat. Lineare Interpolation zwischen den Gitterpunkten ist der Standard (PDF 1.7 /Order 1).
Rückgabewert: ein automatisch erzeugter Farbraumname (Sep1, Sep2, ...). Der Separation-Eintrag teilt sich die Registry mit RegisterSeparation aus v2.45.0, sodass die Namen über beide Varianten hinweg monoton hochzählen. Liefert einen leeren String, wenn StrictVersionLock aktiv ist und die aktive Version unter PDF 1.3 liegt (andernfalls wird die Dokumentversion automatisch auf 1.3 angehoben).
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;
See Also
RegisterSeparation, RegisterSampledFunction, RegisterDeviceN, Version, PDF Filter Support
|