THotPDF.RegisterSeparationLUT Método

 

THotPDF.RegisterSeparationLUT

THotPDF

 

Arriba

Declara un espacio de color Separation de PDF 1.3+ (ISO 32000-1 8.6.6.4) cuya transformación de tinta es una tabla de búsqueda muestreada Function Type 0 (ISO 32000-1 7.10.2). Úsalo cuando la curva de color de la tinta directa no sea lineal: rampas de tinta al estilo PANTONE Hexachrome, curvas de densidad corregidas por gamma, curvas tonales dibujadas a mano que coinciden con una caracterización de prensa o LUTs ICC de conversión sRGB a tinta directa sin la maquinaria completa de perfiles ICC. Para la rampa lineal simple desde cero hasta un único extremo de color a plena intensidad, sigue aplicando el punto de entrada v2.45.0 RegisterSeparation

 

Sintaxis Delphi:

function RegisterSeparationLUT(const ColorantName: AnsiString; const AlternateCS: AnsiString; const Samples: array of byte): AnsiString;

 

Sintaxis C++:

AnsiString RegisterSeparationLUT(const AnsiString& ColorantName, const AnsiString& AlternateCS, const unsigned char* Samples, int SamplesCount);

 

Descripción

Internamente, HotPDF llama a RegisterSampledFunction para construir el flujo Function Type 0 con /Domain [0 1], /Range que cubre cada canal alt-CS en [0, 1], /Size [S] donde S = Length(Samples) / M, /BitsPerSample 8 y /Order 1 (interpolación lineal). La función se conecta a un arreglo de espacio de color [/Separation /ColorantName /AltCS <FuncRef>] nuevo y compartido entre páginas, con el mismo diseño que produce RegisterSeparation; los caminos de código SetFillColorSpace + SetFillColor no ven ningún cambio en la superficie de API entre las dos variantes de registro

 

ColorantName - nombre PDF de la tinta (por ejemplo, 'PANTONE 185 C', 'CutContour', 'White'). Los espacios se escapan como #20 según PDF 1.7 7.3.5 mediante la ruta de escritura de nombres existente

AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3) o 'DeviceCMYK' (M = 4). El flujo de muestras suministra M bytes de salida por punto de la cuadrícula. Cualquier otro valor genera una excepción

Samples - bytes de muestra sin procesar de 8 bits ordenados (c0_0, c1_0, ..., cM-1_0, c0_1, ..., cM-1_S-1) para S puntos de la cuadrícula. Length(Samples) debe ser un múltiplo positivo de M; S se infiere como Length(Samples) / M y debe ser al menos 2 para que la función tenga un rango interpolable. La interpolación lineal entre puntos de la cuadrícula es el valor predeterminado (PDF 1.7 /Order 1)

 

Valor devuelto: un nombre de espacio de color generado automáticamente (Sep1, Sep2, ...). La entrada Separation se comparte con el registro RegisterSeparation v2.45.0, así que los nombres aumentan de forma monótona entre las dos variantes. Devuelve una cadena vacía cuando StrictVersionLock está activado y la Version activa es anterior a PDF 1.3; de lo contrario, la versión del documento sube automáticamente a 1.3

 

Ejemplo de código

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

 

Véase también

RegisterSeparation, RegisterSampledFunction, RegisterDeviceN, Version, Soporte de filtros PDF