THotPDF.RegisterSeparationLUT 메서드

 

THotPDF.RegisterSeparationLUT

THotPDF

 

Top

tint 변환이 Function Type 0 샘플링 룩업 테이블(ISO 32000-1 7.10.2)인 PDF 1.3+ Separation 색 공간(ISO 32000-1 8.6.6.4)을 선언합니다. 스폿 잉크의 색 커브가 비선형일 때 사용하세요. PANTONE Hexachrome 스타일 tint 램프, 감마 보정된 농도 커브, 인쇄기 특성에 맞춘 수작업 톤 커브, 전체 ICC 프로필 구조 없이 sRGB에서 스폿으로 변환하는 ICC LUT 등이 해당합니다. 0에서 단일 최대 강도 색 끝점까지의 단순 선형 램프라면 v2.45.0의 RegisterSeparation 진입점을 그대로 쓰면 됩니다.

 

Delphi syntax:

function RegisterSeparationLUT(const ColorantName: AnsiString; const AlternateCS: AnsiString; const Samples: array of byte): AnsiString;

 

C++ syntax:

AnsiString RegisterSeparationLUT(const AnsiString& ColorantName, const AnsiString& AlternateCS, const unsigned char* Samples, int SamplesCount);

 

Description

HotPDF는 내부적으로 RegisterSampledFunction을 호출해 Function Type 0 스트림을 만듭니다. /Domain [0 1], /Range(각 대체 색 공간 채널을 [0, 1]로 덮음), /Size [S](S = Length(Samples) / M), /BitsPerSample 8, /Order 1(선형 보간)이 사용됩니다. 이 함수는 페이지 간에 공유되는 새 [/Separation /ColorantName /AltCS <FuncRef>] 색 공간 배열에 연결되며, RegisterSeparation이 만드는 레이아웃과 같기 때문에 이후의 SetFillColorSpace + SetFillColor 코드 경로는 두 등록 방식 사이에서 API 표면의 차이를 전혀 느끼지 못합니다.

 

ColorantName - 잉크의 PDF Name입니다(예: 'PANTONE 185 C', 'CutContour', 'White'). 공백은 기존 name 기록 경로에서 PDF 1.7 7.3.5에 따라 #20으로 이스케이프됩니다.

AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3), or 'DeviceCMYK' (M = 4). The sample stream supplies M output bytes per grid point. Any other value raises an exception.

Samples - 그리드 점 S개에 대해 (c0_0, c1_0, ..., cM-1_0, c0_1, ..., cM-1_S-1) 순서로 나열한 raw 8비트 샘플 바이트입니다. Length(Samples)는 M의 양의 배수여야 하고, S는 Length(Samples) / M으로 추정되며 함수에 보간 가능한 범위가 있도록 2 이상이어야 합니다. 그리드 점 사이의 선형 보간이 기본값입니다(PDF 1.7 /Order 1).

 

반환 값: 자동 생성된 색 공간 이름(Sep1, Sep2, ...)입니다. Separation 항목은 v2.45.0의 RegisterSeparation 레지스트리와 공유되므로, 두 방식에 걸쳐 이름이 단조 증가합니다. StrictVersionLock이 켜져 있고 현재 Version이 PDF 1.3 미만이면 빈 문자열을 반환합니다(그렇지 않으면 문서 버전이 1.3으로 자동 상향됩니다).

 

Code Example

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