|
Ajoute un objet image XObject couleur avec un objet image XObject de masque souple PDF 1.4 (ISO 32000-1 8.9.5.4) afin que l'image obtenue conserve une transparence complète pixel par pixel au lieu de la limite binaire activé/désactivé de l'ancien chemin /ImageMask
Syntaxe Delphi :
function AddImageWithSMask(Width, Height: Integer; const RGB: TBytes; const Alpha: TBytes): Integer;
function AddImageWithSMask32(Bitmap32: TBitmap): Integer;
Syntaxe C++ :
__property int AddImageWithSMask(int Width, int Height, const TBytes& RGB, const TBytes& Alpha);
__property int AddImageWithSMask32(TBitmap* Bitmap32);
Description
Les images SMask transportent un canal DeviceGray indépendant sur 8 bits dont la luminosité pilote l'alpha de l'image couleur au moment du rendu (0 = totalement transparent, 255 = totalement opaque). HotPDF émet les deux plans sous forme d'objets image XObject compressés en Flate, relie l'entrée /SMask du dictionnaire de l'image couleur à l'objet XObject de masque souple, et renvoie un index XImages que THPDFPage.ShowImage accepte directement - tout le code de placement en aval reste inchangé
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)
Surcharge de commodité pour le cas courant « j'ai un PNG avec alpha » Le TBitmap doit avoir PixelFormat = pf32bit ; HotPDF lit directement les lignes ScanLine BGRA, réorganise en R G B pour le plan couleur et copie l'octet A vers le plan alpha avant de déléguer au point d'entrée brut AddImageWithSMask
Valeur de retour : un index dans XImages identique à celui renvoyé par AddImage ; passez-le à THPDFPage.ShowImage pour placer l'image sur une page. Renvoie -1 lorsque StrictVersionLock est activé et que la Version courante est inférieure à PDF 1.4 (sinon la version est relevée automatiquement à 1.4)
Exemple de code
// 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;
Voir aussi
AddImage, THPDFPage.ShowImage, Version, Prise en charge des filtres PDF
|