THotPDF.AddImageWithSMask メソッド

 

THotPDF.AddImageWithSMask

THotPDF

 

トップへ  前へ  次へ

カラー画像 XObject を PDF 1.4 のソフトマスク(soft-mask)画像 XObject(ISO 32000-1 8.9.5.4)とともに追加し、結果の画像が従来の /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 ビット DeviceGray チャンネルを持ち、その輝度が描画時のカラー画像のアルファを決定します (0 = 完全に透明、255 = 完全に不透明)。HotPDF は両方のプレーンを Flate 圧縮された Image XObject として出力し、カラー画像辞書の /SMask エントリを soft-mask XObject に接続し、THPDFPage.ShowImage が直接受け取れる XImages インデックスを返します。以降の配置コードは変更なしで動作します

 

AddImageWithSMask(Width, Height, RGB, Alpha)

- Width / Height: ピクセル寸法。両方のプレーンで同一です。

- RGB: Width * Height * 3 バイト。行優先(row-major)のトップダウンで、ピクセルごとに R G B がインターリーブされています(行のパディングなし)。

- Alpha: Width * Height バイト。行優先(row-major)のトップダウンで、ピクセルごとに 8ビットの輝度(luminosity)があります。

 

AddImageWithSMask32(Bitmap32)

一般的な「アルファ付きの PNG がある」ワークフローのための便利なオーバーロード。TBitmapPixelFormat = pf32bit を持つ必要があります。HotPDF は BGRA の ScanLine 行を直接読み取り、カラープレーン用に R G B に再配置し、A バイトをアルファプレーンにコピーしてから、生の AddImageWithSMask エントリポイントに委譲します。

 

戻り値: AddImage が返すものと同じ XImages 内のインデックスです。画像をページに配置するには THPDFPage.ShowImage に渡します。StrictVersionLock がオンで、アクティブな Version が PDF 1.4 未満の場合は -1 を返します。それ以外の場合、バージョンは自動的に 1.4 へ引き上げられます

 

コード例

// 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 フィルターのサポート