|
Declara um espaço de cor DeviceN do PDF 1.3+ respaldado por N tintas spot fornecidas pelo usuário (ISO 32000-1 8.6.6.5). Generaliza RegisterSeparation de uma colorante para muitas: impressão de seis cores, tintas metálicas / fluorescentes, misturas de tintas PDF/X customizadas ou qualquer conjunto de tintas de N canais.
Sintaxe Delphi:
function RegisterDeviceN( const ColorantNames: array of AnsiString; const AlternateCS: AnsiString; const TintC1Matrix: array of Extended): AnsiString;
Sintaxe C++:
AnsiString RegisterDeviceN(const AnsiString* ColorantNames, int ColorantNameCount, const AnsiString& AlternateCS, const Extended* TintC1Matrix, int TintC1MatrixCount);
Descrição
DeviceN recebe N operandos de tint em [0..1], um por colorante, e calcula componentes de saída M em AlternateCS usando uma transformação de tint de mistura ponderada linear que o HotPDF constrói internamente como uma Function Type 4 de calculadora PostScript. A saída do canal m é a soma sobre todas as colorantes n de tint[n] * TintC1Matrix[n*M + m], limitada a [0..1] pelo pipeline de renderização.
ColorantNames - array de N nomes de tintas. Cada entrada é gravada como um nome PDF; espaços são escapados para #20 conforme PDF 1.7 7.3.5. O nome especial 'None' marca um slot de colorante não usado. A lista de nomes define as N dimensões de entrada do espaço de cor resultante.
AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3) ou 'DeviceCMYK' (M = 4). Qualquer outro valor dispara exceção.
TintC1Matrix - array N * M Extended por linha. Linha n coluna m é a contribuição da colorante n ao canal m de AlternateCS em força total (tint[n] = 1.0) com todas as outras tintas em zero. O comprimento deve ser exatamente Length(ColorantNames) * M.
Return value: um nome gerado automaticamente (DevN1, DevN2, ...). 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
// Two-colorant DeviceN over DeviceRGB. Colorant 0 ('Red') is pure
// red at full strength, colorant 1 ('Blue') is pure blue. Mixing
// (0.5, 0.5) yields a 50/50 blend; (1, 1) saturates to magenta
var
CSName: AnsiString;
Mat: array[0..5] of Extended;
begin
HPDF.Version := pdf14;
HPDF.BeginDoc;
Mat[0] := 1.0; Mat[1] := 0.0; Mat[2] := 0.0; // Red row -> (1, 0, 0)
Mat[3] := 0.0; Mat[4] := 0.0; Mat[5] := 1.0; // Blue row -> (0, 0, 1)
CSName := HPDF.RegisterDeviceN(
['Red', 'Blue'], 'DeviceRGB', Mat);
HPDF.CurrentPage.SetFillColorSpace(CSName);
HPDF.CurrentPage.SetFillColor([0.5, 0.5]); // mid-purple
HPDF.CurrentPage.Rectangle(60, 60, 200, 100);
HPDF.CurrentPage.Fill;
HPDF.EndDoc;
end;
See Also
RegisterSeparation, RegisterLabColorSpace, Version, PDF Filter Support
|