THotPDF.RegisterSeparationLUT Method

 

THotPDF.RegisterSeparationLUT

THotPDF

 

الأعلى

يعلن Separation colour space في PDF 1.3+ (ISO 32000-1 8.6.6.4) يكون tint transform فيه Function Type 0 sampled lookup table (ISO 32000-1 7.10.2). استخدمه عندما يكون منحنى spot-ink color غير خطي، مثل PANTONE Hexachrome-style tint ramps أو gamma-corrected density curves أو tone curves مطابقة للمطبعة

 

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 تغطي كل قناة من قنوات فضاء الألوان البديل في المدى [0, 1]، و /Size [S] حيث S = Length(Samples) / M، و /BitsPerSample 8 و /Order 1 (استيفاء خطي). ويوصل التابع في مصفوفة فضاء ألوان جديدة [/Separation /ColorantName /AltCS <FuncRef>] مشتركة عبر الصفحات، مطابقةً التخطيط الذي ينتجه RegisterSeparation - فلا يرى مسارا الشيفرة SetFillColorSpace + SetFillColor اللاحقان أي تغيير في سطح الواجهة بين نسختي التسجيل

 

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 من نقاط الشبكة. ويجب أن يكون Length(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 Filter Support