THotPDF.AddImageWithSMask-Methode

 

THotPDF.AddImageWithSMask

THotPDF

 

Oben  Zurück  Weiter

Fügt ein Farbbild-XObject zusammen mit einem PDF 1.4-Soft-Masken-Bild-XObject (ISO 32000-1 8.9.5.4) hinzu, sodass das resultierende Bild eine vollständige Transparenz pro Pixel anstelle des binären Ein/Aus-Grenzwerts des alten /ImageMask-Pfads besitzt

 

Delphi-Syntax:

function AddImageWithSMask(Width, Height: Integer; const RGB: TBytes; const Alpha: TBytes): Integer;

function AddImageWithSMask32(Bitmap32: TBitmap): Integer;

 

C++-Syntax:

__property int AddImageWithSMask(int Width, int Height, const TBytes& RGB, const TBytes& Alpha);

__property int AddImageWithSMask32(TBitmap* Bitmap32);

 

Beschreibung

SMask-Bilder enthalten einen unabhängigen 8-Bit-DeviceGray-Kanal, dessen Helligkeit das Alpha des Farbbildes beim Zeichnen steuert (0 = vollständig transparent, 255 = vollständig deckend) — HotPDF gibt beide Ebenen als Flate-komprimierte Bild-XObjects aus, verknüpft den /SMask-Eintrag des Farbbild-Dictionarys mit dem Soft-Masken-XObject und gibt einen XImages-Index zurück, den THPDFPage.ShowImage direkt akzeptiert; der gesamte nachgelagerte Platzierungscode bleibt unverändert

 

AddImageWithSMask(Width, Height, RGB, Alpha)

- Width / Height: Pixelabmessungen, identisch für beide Ebenen

- RGB: Width * Height * 3 Bytes, zeilenweise von oben nach unten, R G B pro Pixel verschachtelt (kein Zeilen-Padding)

- Alpha: Width * Height Bytes, zeilenweise von oben nach unten, 8-Bit-Helligkeit pro Pixel

 

AddImageWithSMask32(Bitmap32)

Komfortable Überladung für den häufigen Workflow „Ich habe eine PNG mit Alpha“ — Das TBitmap muss PixelFormat = pf32bit haben; HotPDF liest die BGRA ScanLine-Zeilen direkt, ordnet sie für die Farbebene in R G B um und kopiert das A-Byte in die Alpha-Ebene, bevor es an den rohen AddImageWithSMask-Einstiegspunkt delegiert

 

Rückgabewert: Ein Index in XImages, der mit dem von AddImage zurückgegebenen identisch ist; übergeben Sie ihn an THPDFPage.ShowImage, um das Bild auf einer Seite zu platzieren. Gibt -1 zurück, wenn StrictVersionLock aktiviert ist und die aktive Version unter PDF 1.4 liegt (andernfalls wird die Version automatisch auf 1.4 erhöht)

 

Codebeispiel

// 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;

 

Siehe auch

AddImage, THPDFPage.ShowImage, Version, PDF Filter Support