|
Tint dönüşümü Function Type 0 örneklenmiş arama tablosu (ISO 32000-1 7.10.2) olan PDF 1.3+ Separation renk uzayı (ISO 32000-1 8.6.6.4) bildirir. Bunu spot mürekkep renk eğrisi doğrusal olmadığında kullanın - PANTONE Hexachrome tarzı tint rampaları, gama düzeltilmiş yoğunluk eğrileri, baskı karakterizasyonuyla eşleşen elle çizilmiş ton eğrileri, tam ICC profil mekanizması olmadan sRGB-to-spot dönüşüm ICC LUT'leri. Sıfırdan tek tam güçlü renk uç noktasına giden basit doğrusal rampa için v2.45.0 RegisterSeparation giriş noktası hâlâ geçerlidir
Delphi sözdizimi:
function RegisterSeparationLUT(const ColorantName: AnsiString; const AlternateCS: AnsiString; const Samples: array of byte): AnsiString;
C++ sözdizimi:
AnsiString RegisterSeparationLUT(const AnsiString& ColorantName, const AnsiString& AlternateCS, const unsigned char* Samples, int SamplesCount);
Açıklama
HotPDF, /Domain [0 1], [0, 1] içindeki her alt-CS kanalını kapsayan /Range, S = Length(Samples) / M olan /Size [S], /BitsPerSample 8 ve /Order 1 (doğrusal enterpolasyon) ile Function Type 0 stream'ini kurmak için dahili olarak RegisterSampledFunction'ı çağırır. İşlev, sayfalar arasında paylaşılan taze bir [/Separation /ColorantName /AltCS <FuncRef>] renk uzayı dizisine bağlanır; RegisterSeparation'ın ürettiği düzingle eşleşir — iki kayıt varyantı arasında aşağı akış SetFillColorSpace + SetFillColor kod yolları API yüzeyi değişikliği görmez.
ColorantName - Mürekkebin PDF adı (örn. 'PANTONE 185 C', 'CutContour', 'White'). Boşluklar, mevcut ad yazıcı yolu tarafından PDF 1.7 7.3.5'e göre #20 olarak kaçırılır.
AlternateCS - 'DeviceGray' (M = 1), 'DeviceRGB' (M = 3) veya 'DeviceCMYK' (M = 4). Örnek stream, grid noktası başına M çıktı baytı sağlar. Diğer değerler istisna fırlatır.
Samples - S grid noktası için (c0_0, c1_0, ..., cM-1_0, c0_1, ..., cM-1_S-1) sıralı ham 8 bitlik örnek baytları. Length(Samples) M'nin pozitif bir katı olmalıdır; S, Length(Samples) / M olarak çıkarılır ve işlevin enterpolasyon aralığına sahip olması için en az 2 olmalıdır. Grid noktaları arasında doğrusal enterpolasyon varsaylandır (PDF 1.7 /Order 1).
Dönüş değeri: otomatik oluşturulan renk uzayı adı (Sep1, Sep2, ...). Separation girdisi v2.45.0 RegisterSeparation kayıt defteriyle paylaşılır, bu nedenle adlar iki varyant boyunca monoton artar. StrictVersionLock açıkken etkin Version PDF 1.3'ün altındaysa boş dize döndürür (aksi halde belge sürümü otomatik olarak 1.3'e yükseltilir)
Kod Örneği
// 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;
Ayrıca bkz.
RegisterSeparation, RegisterSampledFunction, RegisterDeviceN, Version, PDF Filter Support
|