|
사용자가 지정한 스폿 잉크 N개를 기반으로 하는 PDF 1.3+ DeviceN 색 공간(ISO 32000-1 8.6.6.5)을 선언합니다. RegisterSeparation을 잉크 하나에서 여러 개로 일반화한 것으로, 6색 인쇄, 메탈릭·형광 잉크, 사용자 정의 PDF/X 잉크 혼합, 그 밖에 N채널 잉크 세트에 사용합니다.
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);
Description
DeviceN은 colorant마다 하나씩 [0..1] 범위의 tint 피연산자 N개를 받아, M개의 출력 성분을 AlternateCS에서 계산합니다. 이때 HotPDF가 내부적으로 PostScript 계산기 Function Type 4로 만드는 선형 가중 혼합 tint 변환을 사용합니다. 채널 m의 출력은 모든 colorant n에 대한 tint[n] * TintC1Matrix[n*M + m]의 합이며, 렌더링 파이프라인에서 [0..1]로 클램프됩니다.
ColorantNames - 잉크 이름 N개의 배열입니다. 각 항목은 PDF name으로 기록되며, PDF 1.7 7.3.5에 따라 공백은 #20으로 이스케이프됩니다. 특수 이름 'None'은 사용하지 않는 colorant 슬롯을 나타냅니다. 이 이름 목록이 결과 색 공간의 입력 차원 N을 정의합니다.
AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3), or 'DeviceCMYK' (M = 4). Any other value raises an exception.
TintC1Matrix - 행 우선(row-major) N * M Extended 배열입니다. 행 n, 열 m은 colorant n이 AlternateCS 채널 m에 기여하는 값이며, 최대 강도(tint[n] = 1.0)에 다른 tint는 모두 0일 때의 값입니다. 길이는 정확히 Length(ColorantNames) * M이어야 합니다.
반환 값: 자동 생성된 이름(DevN1, DevN2, ...)입니다. StrictVersionLock이 켜져 있고 현재 Version이 PDF 1.3 미만이면 빈 문자열을 반환합니다(그렇지 않으면 문서 버전이 1.3으로 자동 상향됩니다).
Code Example
// 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
|