THotPDF.AddImageWithSMask Methode

 

THotPDF.AddImageWithSMask

THotPDF

 

Boven  Vorige  Volgende

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