|
Declara um espaço de cor Separation do PDF 1.3+ (ISO 32000-1 8.6.6.4) cuja transformação de tint é uma tabela de consulta sampled Function Type 0 (ISO 32000-1 7.10.2). Use isto quando a curva de cor da tinta spot for não linear — rampas de tint estilo PANTONE Hexachrome, curvas de densidade com correção gama, curvas de tom desenhadas à mão casando com uma caracterização de prensa, LUTs ICC de conversão sRGB-para-spot sem toda a maquinaria de perfil ICC. Para a rampa linear simples de zero até um único ponto final de cor em força total, o ponto de entrada RegisterSeparation da v2.45.0 ainda se aplica.
Sintaxe Delphi:
function RegisterSeparationLUT( const ColorantName: AnsiString; const AlternateCS: AnsiString; const Samples: array of byte): AnsiString;
Sintaxe C++:
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 de Function Type 0 com /Domain [0 1], /Range cobrindo cada canal do alt-CS em [0, 1], /Size [S] onde S = Length(Samples) / M, /BitsPerSample 8 e /Order 1 (interpolação linear). A função é ligada a um novo array de espaço de cor [/Separation /ColorantName /AltCS <FuncRef>] compartilhado entre páginas, correspondendo ao layout que o RegisterSeparation produz — os caminhos de código a jusante de SetFillColorSpace + SetFillColor não veem mudança de superfície de API entre as duas variantes de registro.
ColorantName - PDF Name da tinta (ex.: 'PANTONE 185 C', 'CutContour', 'White'). Espaços são escapados para #20 conforme PDF 1.7 7.3.5 pelo caminho existente de gravação de nomes.
AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3) ou 'DeviceCMYK' (M = 4). O stream de amostras fornece M bytes de saída por ponto de grade. Qualquer outro valor dispara exceção.
Samples - bytes brutos de amostras de 8 bits ordenados (c0_0, c1_0, ..., cM-1_0, c0_1, ..., cM-1_S-1) para S pontos de grade. Length(Samples) deve ser múltiplo positivo de M; S é inferido como Length(Samples) / M e deve ser pelo menos 2 para que a função tenha faixa interpolável. A interpolação linear entre pontos de grade é o padrão (PDF 1.7 /Order 1).
Return value: um nome de espaço de cor gerado automaticamente (Sep1, Sep2, ...). A entrada Separation é compartilhada com o registro RegisterSeparation da v2.45.0, de modo que os nomes incrementam monotonicamente entre as duas variantes. Retorna uma string vazia quando StrictVersionLock está ligado e o Version ativo está abaixo do PDF 1.3 (caso contrário a versão do documento é promovida automaticamente para 1.3).
Exemplo 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;
See Also
RegisterSeparation, RegisterSampledFunction, RegisterDeviceN, Version, PDF Filter Support
|