THotPDF.AddImageWithSMask Method

 

THotPDF.AddImageWithSMask

THotPDF

 

Topo  Anterior  Próximo

Adiciona um XObject de imagem colorida junto com um XObject de imagem de soft mask PDF 1.4 (ISO 32000-1 8.9.5.4), para que a imagem resultante carregue transparência completa por pixel em vez do limite binário ligado/desligado do caminho legado /ImageMask

 

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

 

Descrição

Imagens SMask carregam um canal DeviceGray independente de 8 bits cuja luminosidade controla o alfa da imagem colorida no momento da pintura (0 = totalmente transparente, 255 = totalmente opaco). O HotPDF emite os dois planos como XObjects de imagem compactados com Flate, conecta a entrada /SMask do dicionário da imagem colorida ao XObject de soft mask e retorna um índice XImages que THPDFPage.ShowImage aceita diretamente; todo o código posterior de posicionamento continua funcionando sem alterações

 

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)

Sobrecarga de conveniência para o fluxo comum "tenho um PNG com alfa". O TBitmap deve ter PixelFormat = pf32bit; o HotPDF lê diretamente as linhas BGRA ScanLine, reorganiza para R G B no plano de cor e copia o byte A para o plano alfa antes de delegar ao ponto de entrada bruto AddImageWithSMask

 

Valor de retorno: um índice em XImages idêntico ao que AddImage retorna; passe-o para THPDFPage.ShowImage para posicionar a imagem em uma página. Retorna -1 quando StrictVersionLock está ativo e a Version corrente é inferior a PDF 1.4 (caso contrário a versão é elevada automaticamente para 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;

 

Consulte também

AddImage, THPDFPage.ShowImage, Version, PDF Filter Support