THotPDF.RegisterDeviceN Method

 

THotPDF.RegisterDeviceN

THotPDF

 

Вверх

Объявляет цветовое пространство DeviceN в PDF 1.3+ на основе N заданных пользователем spot-красок (ISO 32000-1 8.6.6.5). Обобщает RegisterSeparation от одной краски до многих: шестикрасочная печать, металлик / флуоресцентные краски, пользовательские PDF/X-смеси или любой набор из N каналов.

 

Синтаксис Delphi:

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

 

Синтаксис C++:

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

 

Описание

DeviceN принимает N операндов tint в [0..1], по одному на краску, и вычисляет M выходных компонент в AlternateCS с помощью линейного взвешенного tint-преобразования, которое HotPDF строит внутри как Function Type 4 (постфиксный калькулятор PostScript). Выход канала m — это сумма по всем краскам n tint[n] * TintC1Matrix[n*M + m], с ограничением [0..1] со стороны конвейера отрисовки.

 

ColorantNames — массив из N имён красок. Каждая запись пишется как PDF-имя; пробелы экранируются как #20 согласно PDF 1.7 7.3.5. Специальное имя 'None' помечает неиспользуемый слот краски. Список имён задаёт N входных размерностей результирующего цветового пространства.

AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3) или 'DeviceCMYK' (M = 4). Любое другое значение возбуждает исключение.

TintC1Matrix — матрица row-major N * M из Extended. Строка n, столбец m даёт вклад краски nв AlternateCS канал m при полной силе (tint[n] = 1.0) при всех остальных tint = 0. Длина должна быть ровно Length(ColorantNames) * M.

 

Возвращаемое значение: автосгенерированное имя (DevN1, DevN2, ...). Возвращает пустую строку, когда StrictVersionLock включён, а активная Версия ниже PDF 1.3 (иначе версия документа автоматически повышается до 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;

 

См. также

RegisterSeparation, RegisterLabColorSpace, Версия, Поддержка фильтров PDF