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