|
یک فضای رنگ DeviceN در PDF 1.3+ را اعلام میکند که بر پایه N جوهر spot ارائهشده توسط کاربر است (ISO 32000-1 8.6.6.5). این متد RegisterSeparation را از یک colorant به چند colorant تعمیم میدهد: چاپ ششرنگ، جوهرهای metallic / fluorescent، مخلوطهای جوهر سفارشی PDF/X، یا هر مجموعه جوهر N-channel
نحو Delphi:
function RegisterDeviceN(const ColorantNames: array of AnsiString; const AlternateCS: AnsiString; const TintC1Matrix: array of Extended): AnsiString;
نحو C++:
AnsiString RegisterDeviceN(const AnsiString* ColorantNames, int ColorantNameCount, const AnsiString& AlternateCS, const Extended* TintC1Matrix, int TintC1MatrixCount);
توضیح
DeviceN به ازای هر colorant یک operand tint در [0..1] میگیرد و با استفاده از یک tint transform خطی و weighted-blend که HotPDF آن را بهصورت داخلی به شکل یک Function Type 4 از نوع PostScript-calculator میسازد، M مؤلفه خروجی را در AlternateCS محاسبه میکند. خروجی برای channel m برابر مجموع همه colorantها n از tint[n] * TintC1Matrix[n*M + m] است که توسط pipeline رندر به [0..1] clamp میشود
ColorantNames - آرایهای از N نام جوهر. هر ورودی بهصورت یک PDF name نوشته میشود؛ فاصلهها طبق PDF 1.7 7.3.5 به #20 escape میشوند. نام ویژه 'None' یک slot colorant استفادهنشده را مشخص میکند. فهرست نامها N بُعد ورودی فضای رنگ حاصل را تعریف میکند
AlternateCS - 'DeviceGray' (M = 1)، 'DeviceRGB' (M = 3) یا 'DeviceCMYK' (M = 4). هر مقدار دیگری یک exception ایجاد میکند
TintC1Matrix - آرایه Extended بهصورت row-major با اندازه N * M. سطر n و ستون m سهم colorant n در channel m از AlternateCS را در شدت کامل (tint[n] = 1.0) و با همه tintهای دیگر در صفر مشخص میکند. طول باید دقیقاً Length(ColorantNames) * M باشد
Return value: یک نام تولیدشده بهصورت خودکار (DevN1، DevN2، ...). وقتی StrictVersionLock روشن باشد و Version فعال پایینتر از PDF 1.3 باشد، یک رشته خالی برمیگرداند، وگرنه نسخه سند بهطور خودکار به 1.3 ارتقا مییابد
نمونه کد
// 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
|