متد THotPDF.RegisterSeparationLUT

 

THotPDF.RegisterSeparationLUT

THotPDF

 

بالا

یک فضای رنگ Separation در PDF 1.3+ را اعلام می‌کند (ISO 32000-1 8.6.6.4) که tint transform آن یک lookup table نمونه‌برداری‌شده از نوع Function Type 0 است (ISO 32000-1 7.10.2). وقتی منحنی رنگ spot-ink غیرخطی است از این متد استفاده کنید - rampهای tint به سبک PANTONE Hexachrome، منحنی‌های چگالی با gamma correction، منحنی‌های tone دست‌کشیده که با مشخصات press مطابقت دارند، LUTهای ICC برای تبدیل sRGB به spot بدون سازوکار کامل پروفایل ICC. برای ramp خطی ساده از صفر تا یک نقطه پایان رنگ با شدت کامل، نقطه ورود v2.45.0 RegisterSeparation همچنان کاربرد دارد

 

نحو Delphi:

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

 

نحو C++:

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

 

توضیح

HotPDF به‌صورت داخلی RegisterSampledFunction را فراخوانی می‌کند تا جریان Function Type 0 را با /Domain [0 1]، /Range که هر channel از alt-CS را در [0, 1] پوشش می‌دهد، /Size [S] که در آن S = Length(Samples) / M، /BitsPerSample 8 و /Order 1 (interpolation خطی) بسازد. این function در یک آرایه color-space تازه [/Separation /ColorantName /AltCS <FuncRef>] که بین صفحات مشترک است قرار می‌گیرد و با چیدمان تولیدشده توسط RegisterSeparation مطابقت دارد - مسیرهای کد SetFillColorSpace + SetFillColor در پایین‌دست بین این دو variant ثبت‌کننده هیچ تغییری در سطح API نمی‌بینند

 

ColorantName - PDF Name جوهر (برای نمونه 'PANTONE 185 C'، 'CutContour'، 'White'). فاصله‌ها طبق PDF 1.7 7.3.5 توسط مسیر name-writer موجود به #20 escape می‌شوند

AlternateCS - 'DeviceGray' (M = 1)، 'DeviceRGB' (M = 3) یا 'DeviceCMYK' (M = 4). جریان نمونه به ازای هر grid point، M بایت خروجی فراهم می‌کند. هر مقدار دیگری یک exception ایجاد می‌کند

Samples - بایت‌های خام نمونه 8-bit که برای S grid point به صورت (c0_0, c1_0, ..., cM-1_0, c0_1, ..., cM-1_S-1) مرتب شده‌اند. Length(Samples) باید مضرب مثبتی از M باشد؛ S از Length(Samples) / M استنباط می‌شود و باید دست‌کم 2 باشد تا function بازه قابل interpolation داشته باشد. interpolation خطی بین grid pointها پیش‌فرض است (PDF 1.7 /Order 1)

 

Return value: یک نام color-space تولیدشده به‌صورت خودکار (Sep1، Sep2، ...). entry مربوط به Separation با registry v2.45.0 RegisterSeparation مشترک است، بنابراین نام‌ها در دو variant به‌صورت یکنواخت افزایش می‌یابند. وقتی StrictVersionLock روشن باشد و Version فعال پایین‌تر از PDF 1.3 باشد یک رشته خالی برمی‌گرداند (در غیر این صورت نسخه سند به‌طور خودکار به 1.3 ارتقا می‌یابد)

 

نمونه کد

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