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