متد THotPDF.AddImageWithSMask

 

THotPDF.AddImageWithSMask

THotPDF

 

بالا  قبلی  بعدی

یک XObject تصویر رنگی را همراه با یک XObject تصویر ماسک نرم PDF 1.4 (ISO 32000-1 8.9.5.4) اضافه می‌کند تا تصویر نهایی به‌جای محدودیت روشن/خاموشِ مسیر قدیمی /ImageMask، شفافیت کاملِ هر پیکسل را داشته باشد

 

نحو دلفی

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 یک کانال مستقل DeviceGray هشت‌بیتی دارند که روشنایی آن در زمان رسم، آلفای تصویر رنگی را تعیین می‌کند (0 = کاملا شفاف، 255 = کاملا مات). HotPDF هر دو صفحه را به صورت XObject تصویر فشرده‌شده با Flate صادر می‌کند، مدخل /SMask دیکشنری تصویر رنگی را به XObject ماسک نرم وصل می‌کند، و یک شاخص XImages برمی‌گرداند که THPDFPage.ShowImage مستقیما می‌پذیرد - تمام کد جانمایی بعدی بدون تغییر کار می‌کند

 

AddImageWithSMask(Width, Height, RGB, Alpha)

- Width / Height: ابعاد پیکسلی، یکسان برای هر دو صفحه

- RGB: Width * Height * 3 بایت، به ترتیب سطر از بالا به پایین، با درهم‌تنیدگی R G B برای هر پیکسل (بدون padding سطر)

- Alpha: Width * Height بایت، به ترتیب سطر از بالا به پایین، روشنایی 8 بیتی برای هر پیکسل

 

AddImageWithSMask32(Bitmap32)

یک سربار کمکی برای سناریوی رایج «یک PNG با آلفا دارم». TBitmap باید PixelFormat = pf32bit داشته باشد؛ HotPDF سطرهای BGRA در ScanLine را مستقیم می‌خواند، آن‌ها را برای صفحه رنگی به R G B بازآرایی می‌کند، و بایت A را پیش از واگذاری به نقطه ورود خام AddImageWithSMask به صفحه آلفا کپی می‌کند

 

مقدار بازگشتی: یک شاخص در XImages که با مقداری که AddImage برمی‌گرداند یکسان است؛ آن را به 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