THotPDF.RegisterSeparationLUT Method

 

THotPDF.RegisterSeparationLUT

THotPDF

 

Topo

Declara um espaço de cor Separation de PDF 1.3+ (ISO 32000-1 8.6.6.4) cuja transformação de tint é uma tabela de consulta amostrada Function Type 0 (ISO 32000-1 7.10.2). Use este método quando a curva de cor da tinta direta não é linear - rampas de tint ao estilo PANTONE Hexachrome, curvas de densidade com correção gama, curvas de tonalidade desenhadas à mão que reproduzam a caracterização de uma prensa, LUTs ICC de conversão sRGB-para-direta sem toda a maquinaria de perfis ICC. Para a rampa linear simples de zero até um único extremo de cor com força total, o ponto de entrada v2.45.0 RegisterSeparation continua a servir.

 

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);

 

Descrição

O HotPDF chama internamente RegisterSampledFunction para construir o stream Function Type 0 com /Domain [0 1], /Range a cobrir cada canal do espaço alternativo em [0, 1], /Size [S] em que S = Length(Samples) / M, /BitsPerSample 8 e /Order 1 (interpolação linear). A função é ligada a um array de espaços de cor [/Separation /ColorantName /AltCS <FuncRef>] novo e partilhado entre páginas, igual ao layout que o RegisterSeparation produz - os caminhos de código a jusante SetFillColorSpace + SetFillColor não veem qualquer alteração de superfície de API entre as duas variantes de registo.

 

ColorantName - PDF Name da tinta (p. ex. 'PANTONE 185 C', 'CutContour', 'White'). Os espaços são escapados para #20 conforme o PDF 1.7 7.3.5 pelo caminho de escrita de nomes existente.

AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3) ou 'DeviceCMYK' (M = 4). O stream de amostras fornece M bytes de saída por ponto da grelha. Qualquer outro valor gera uma exceção.

Samples - bytes de amostra brutos de 8 bits ordenados (c0_0, c1_0, ..., cM-1_0, c0_1, ..., cM-1_S-1) para S pontos da grelha. Length(Samples) tem de ser um múltiplo positivo de M; S é inferido como Length(Samples) / M e tem de ser pelo menos 2, para que a função tenha intervalo interpolável. A interpolação linear entre pontos da grelha é a predefinição (PDF 1.7 /Order 1).

 

Return value: um nome de espaço de cor gerado automaticamente (Sep1, Sep2, ...). A entrada Separation é partilhada com o registo do RegisterSeparation da v2.45.0, pelo que os nomes crescem monotonicamente nas duas variantes. Devolve uma cadeia vazia quando StrictVersionLock está ativo e a Version ativa é anterior ao PDF 1.3 (caso contrário, a versão do documento avança automaticamente para 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;

 

Ver também

RegisterSeparation, RegisterSampledFunction, RegisterDeviceN, Version, PDF Filter Support