|
Προσθέτει ένα color image XObject μαζί με ένα PDF 1.4 soft-mask image XObject (ISO 32000-1 8.9.5.4), ώστε η τελική εικόνα να μεταφέρει πλήρη διαφάνεια ανά pixel αντί για τον δυαδικό περιορισμό on/off της παλαιάς διαδρομής /ImageMask
Σύνταξη Delphi:
function AddImageWithSMask(Width, Height: Integer; const RGB: TBytes; const Alpha: TBytes): Integer;
function AddImageWithSMask32(Bitmap32: TBitmap): Integer;
Σύνταξη C++:
__property int AddImageWithSMask(int Width, int Height, const TBytes& RGB, const TBytes& Alpha);
__property int AddImageWithSMask32(TBitmap* Bitmap32);
Περιγραφή
Οι SMask εικόνες μεταφέρουν ένα ανεξάρτητο 8-bit DeviceGray κανάλι, του οποίου η φωτεινότητα οδηγεί το alpha της έγχρωμης εικόνας κατά τη σχεδίαση (0 = πλήρως διαφανές, 255 = πλήρως αδιαφανές). Το HotPDF εκπέμπει και τα δύο planes ως Flate-compressed image XObjects, συνδέει την εγγραφή /SMask του color image dictionary στο soft-mask XObject και επιστρέφει έναν δείκτη XImages που το THPDFPage.ShowImage δέχεται απευθείας, οπότε όλος ο downstream κώδικας τοποθέτησης λειτουργεί χωρίς αλλαγή
AddImageWithSMask(Width, Height, RGB, Alpha)
- Width / Height: διαστάσεις pixel, ίδιες και για τα δύο planes
- RGB: Width * Height * 3 bytes, row-major από πάνω προς τα κάτω, R G B interleaved ανά pixel (χωρίς row padding)
- Alpha: Width * Height bytes, row-major από πάνω προς τα κάτω, 8-bit φωτεινότητα ανά pixel
AddImageWithSMask32(Bitmap32)
Convenience overload για την κοινή ροή "έχω PNG με alpha". Το TBitmap πρέπει να έχει PixelFormat = pf32bit. Το HotPDF διαβάζει απευθείας τις BGRA ScanLine γραμμές, τις αναδιατάσσει σε R G B για το color plane και αντιγράφει το byte A στο alpha plane πριν αναθέσει την εργασία στο raw entry point AddImageWithSMask
Τιμή επιστροφής: ένας δείκτης στο XImages, ίδιος με αυτόν που επιστρέφει το AddImage. Περάστε τον στο THPDFPage.ShowImage για να τοποθετήσετε την εικόνα σε σελίδα. Επιστρέφει -1 όταν το StrictVersionLock είναι ενεργό και η ενεργή Version είναι κάτω από PDF 1.4 (διαφορετικά η έκδοση ανεβαίνει αυτόματα σε 1.4)
Code Example
// 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;
Δείτε επίσης
AddImage, THPDFPage.ShowImage, Version, PDF Filter Support
|