THotPDF.RegisterSeparationLUT – metoda

 

THotPDF.RegisterSeparationLUT – metoda

THotPDF

 

Nahoru

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