THotPDF.RegisterSeparationLUT Method

 

THotPDF.RegisterSeparationLUT

THotPDF

 

ด้านบน

ประกาศพื้นที่สีแบบ Separation สำหรับ PDF 1.3+ (ISO 32000-1 8.6.6.4) ซึ่งการแปลงสีอ่อน (tint transform) จะเป็นตารางค้นหาค่าตัวอย่าง Function Type 0 (ISO 32000-1 7.10.2) ใช้ตัวนี้เมื่อเส้นโค้งสีของหมึกพิเศษ (spot-ink) ไม่เป็นเชิงเส้น - เช่น ทางลาดสีอ่อนสไตล์ PANTONE Hexachrome, เส้นโค้งความหนาแน่นที่แก้ไขแกมมา, เส้นโค้งโทนสีที่วาดด้วยมือซึ่งตรงกับลักษณะเฉพาะของแท่นพิมพ์, ICC LUT สำหรับการแปลง sRGB เป็น spot โดยไม่มีกลไกโปรไฟล์ ICC เต็มรูปแบบ สำหรับทางลาดเชิงเส้นอย่างง่ายจากศูนย์ไปยังจุดสิ้นสุดสีความเข้มเต็มจุดเดียว จุดเข้าใช้งาน RegisterSeparation ของ v2.45.0 ยังคงใช้งานได้

 

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);

 

คำอธิบาย

HotPDF จะเรียกใช้อย่างเป็นภายในกับ RegisterSampledFunction เพื่อสร้างสตรีม Function Type 0 ด้วย /Domain [0 1], /Range ครอบคลุมแต่ละแชนเนล alt-CS ใน [0, 1], /Size [S] โดยที่ S = Length(Samples) / M, /BitsPerSample 8 และ /Order 1 (การประมาณค่าเชิงเส้น) ฟังก์ชันนี้จะถูกเชื่อมต่อเข้ากับอาร์เรย์พื้นที่สี [/Separation /ColorantName /AltCS <FuncRef>] ตัวใหม่ที่ใช้ร่วมกันในหน้าต่างๆ ซึ่งตรงกับเค้าโครงที่ RegisterSeparation สร้างขึ้น - พาธโค้ด SetFillColorSpace + SetFillColor ปลายน้ำจะไม่พบการเปลี่ยนแปลงของพื้นที่ผิว API ระหว่างตัวแปรผู้ลงทะเบียนทั้งสองตัว

 

ColorantName - ชื่อ PDF ของหมึกพิมพ์ (เช่น 'PANTONE 185 C', 'CutContour', 'White') ช่องว่างจะถูกแปลงเป็น #20 ตามข้อกำหนด PDF 1.7 7.3.5 โดยพาธตัวเขียนชื่อที่มีอยู่

AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3) หรือ 'DeviceCMYK' (M = 4) สตรีมตัวอย่างจะให้ไบต์เอาต์พุต M ไบต์ต่อจุดกริด ค่าอื่นๆ จะทำให้เกิดข้อยกเว้น

Samples - ไบต์ตัวอย่างแบบ 8 บิตดิบที่เรียงลำดับ (c0_0, c1_0, ..., cM-1_0, c0_1, ..., cM-1_S-1) สำหรับจุดกริด S ความยาวของ Samples ต้องเป็นพหุคูณจำนวนเต็มบวกของ M; S จะอนุมานได้จาก Length(Samples) / M และต้องมีค่าอย่างน้อย 2 เพื่อให้ฟังก์ชันมีช่วงที่สอดแทรกได้ การประมาณค่าเชิงเส้นระหว่างจุดกริดคือค่าเริ่มต้น (PDF 1.7 /Order 1)

 

ค่าที่ส่งกลับ: ชื่อพื้นที่สีที่สร้างขึ้นโดยอัตโนมัติ (Sep1, Sep2, ...) รายการ Separation จะถูกแชร์ร่วมกับรีจิสทรี RegisterSeparation ของ v2.45.0 ดังนั้นชื่อจะเพิ่มขึ้นตามลำดับอย่างต่อเนื่องในสองตัวแปร ส่งกลับสตริงว่างเมื่อ 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;

 

ดูเพิ่มเติม

RegisterSeparation, RegisterSampledFunction, RegisterDeviceN, Version, การสนับสนุนตัวกรอง PDF