THotPDF.RegisterSeparationLUT Método

 

THotPDF.RegisterSeparationLUT

THotPDF

 

Arriba

Declara un espacio de color Separation PDF 1.3+ (ISO 32000-1 8.6.6.4) cuyo tint transform es una tabla de búsqueda muestreada Function Type 0 (ISO 32000-1 7.10.2). Use esto cuando la curva de color de tinta spot no sea lineal: rampas de tinta estilo PANTONE Hexachrome, curvas de densidad con corrección gamma, curvas tonales dibujadas manualmente que coinciden con una caracterización de prensa, LUTs ICC de conversión sRGB-a-spot sin toda la maquinaria de perfil ICC. Para la rampa lineal simple desde cero hasta un único extremo de color de intensidad completa, el punto de entrada v2.45.0 RegisterSeparation sigue aplicando

 

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

HotPDF llama internamente a RegisterSampledFunction para construir el stream Function Type 0 con /Domain [0 1], /Range cubriendo 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 array de espacio de color nuevo [/Separation /ColorantName /AltCS <FuncRef>] compartido entre páginas, coincidiendo con el layout que produce RegisterSeparation; las rutas de código descendentes SetFillColorSpace + SetFillColor no ven ningún cambio de superficie API entre las dos variantes de registro

 

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

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

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

 

Valor devuelto: un nombre de espacio de color generado automáticamente (Sep1, Sep2, ...). La entrada Separation se comparte con el registro RegisterSeparation de v2.45.0, por lo que los nombres incrementan de forma monótona entre las dos variantes. Devuelve una cadena vacía cuando StrictVersionLock está activado y la Version activa está por debajo de PDF 1.3 (en caso 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