THotPDF.RegisterDeviceN Method

 

THotPDF.RegisterDeviceN

THotPDF

 

Горе

Декларира PDF 1.3+ DeviceN color space, поддържан от N spot inks, подадени от потребителя (ISO 32000-1 8.6.6.5). Обобщава RegisterSeparation от един colorant към много: шестцветен печат, metallic / fluorescent inks, custom PDF/X ink mixes или всякакъв N-channel ink set

 

Delphi syntax:

function RegisterDeviceN(const ColorantNames: array of AnsiString; const AlternateCS: AnsiString; const TintC1Matrix: array of Extended): AnsiString;

 

C++ syntax:

AnsiString RegisterDeviceN(const AnsiString* ColorantNames, int ColorantNameCount, const AnsiString& AlternateCS, const Extended* TintC1Matrix, int TintC1MatrixCount);

 

Описание

DeviceN приема N tint operands в [0..1], по един за всеки colorant, и изчислява M output components в AlternateCS чрез linear weighted-blend tint transform, който HotPDF изгражда вътрешно като PostScript-calculator Function Type 4. Изходът за channel m е сумата през всички colorants n от tint[n] * TintC1Matrix[n*M + m], clamped до [0..1] от rendering pipeline-а

 

ColorantNames - масив от N ink names. Всеки entry се записва като PDF name; spaces се escape-ват като #20 според PDF 1.7 7.3.5. Специалното име 'None' маркира неизползван colorant slot. Списъкът от имена определя N input dimensions на резултантния color space

AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3), or 'DeviceCMYK' (M = 4). Any other value raises an exception.

TintC1Matrix - row-major N * M Extended array. Row n column m is colorant n's contribution to AlternateCS channel m at full strength (tint[n] = 1.0) with all other tints at zero. Length must be exactly Length(ColorantNames) * M.

 

Return value: автоматично генерирано име (DevN1, DevN2, ...). Връща празен string, когато StrictVersionLock е включен и активната Version е под PDF 1.3 (в противен случай version-ът на документа се повишава автоматично до 1.3)

 

Примерен код

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