|
Voegt een kleurafbeeldings-XObject samen met een PDF 1.4 soft-mask-afbeeldings-XObject (ISO 32000-1 8.9.5.4) toe, zodat de resulterende afbeelding volledige transparantie per pixel heeft in plaats van de binaire aan/uit-beperking van het oudere /ImageMask-pad
Delphi-syntaxis:
function AddImageWithSMask(Width, Height: Integer; const RGB: TBytes; const Alpha: TBytes): Integer;
function AddImageWithSMask32(Bitmap32: TBitmap): Integer;
C++-syntaxis:
__property int AddImageWithSMask(int Width, int Height, const TBytes& RGB, const TBytes& Alpha);
__property int AddImageWithSMask32(TBitmap* Bitmap32);
Beschrijving
SMask-afbeeldingen hebben een onafhankelijk 8-bits DeviceGray-kanaal waarvan de luminantie tijdens het tekenen de alpha van de kleurafbeelding aanstuurt (0 = volledig transparant, 255 = volledig ondoorzichtig). HotPDF schrijft beide vlakken weg als Flate-gecomprimeerde image XObjects, koppelt het /SMask-item in het kleurafbeeldingswoordenboek aan het soft-mask XObject en retourneert een XImages-index die THPDFPage.ShowImage direct accepteert - alle downstream plaatsingscode blijft ongewijzigd
AddImageWithSMask(Width, Height, RGB, Alpha)
- Width / Height: pixel dimensions, identical for both planes
- RGB: Width * Height * 3 bytes, row-major top-down, R G B interleaved per pixel (no row padding)
- Alpha: Width * Height bytes, row-major top-down, 8-bit luminosity per pixel
AddImageWithSMask32(Bitmap32)
Gemakkelijke overload voor de veelvoorkomende workflow "ik heb een PNG met alpha". De TBitmap moet PixelFormat = pf32bit hebben; HotPDF leest de BGRA ScanLine-rijen rechtstreeks, herschikt ze naar R G B voor het kleurvlak en kopieert het A-byte naar het alphavlak voordat het de aanroep doorgeeft aan het ruwe AddImageWithSMask-eindpunt
Retourwaarde: een index in XImages die gelijk is aan die welke AddImage teruggeeft; geef die door aan THPDFPage.ShowImage om de afbeelding op een pagina te plaatsen. Geeft -1 terug wanneer StrictVersionLock aan staat en de actieve Version lager is dan PDF 1.4 (anders wordt de versie automatisch opgehoogd naar 1.4)
Codevoorbeeld
// Raw-bytes path: build a 64x64 magenta-on-white plane + horizontal
// alpha gradient and place the result on the page
var
RGB, Alpha: TBytes;
W, H, X, Y, Idx, ImIdx: Integer;
begin
W := 64;
H := 64;
SetLength(RGB, W * H * 3);
SetLength(Alpha, W * H);
for Y := 0 to H - 1 do
for X := 0 to W - 1 do
begin
Idx := Y * W + X;
RGB[Idx * 3 + 0] := 255; // R
RGB[Idx * 3 + 1] := 0; // G
RGB[Idx * 3 + 2] := 255; // B
Alpha[Idx] := Byte((X * 255) div (W - 1));
end;
HPDF.Version := pdf14; // SMask requires PDF 1.4
HPDF.Compression := cmFlateDecode;
HPDF.BeginDoc;
ImIdx := HPDF.AddImageWithSMask(W, H, RGB, Alpha);
HPDF.CurrentPage.ShowImage(ImIdx, 80, 80, 256, 256, 0);
HPDF.EndDoc;
end;
Zie ook
AddImage, THPDFPage.ShowImage, Version, PDF-filterondersteuning
|