THotPDF.AddImageWithSMask Method

 

THotPDF.AddImageWithSMask

THotPDF

 

ด้านบน  ก่อนหน้า  ถัดไป

เพิ่ม XObject ของรูปภาพสีร่วมกับ XObject ของรูปภาพ soft-mask ของ PDF 1.4 (ISO 32000-1 8.9.5.4) เพื่อให้รูปภาพผลลัพธ์มีความโปร่งใสแบบพิกเซลต่อพิกเซลอย่างสมบูรณ์ แทนที่จะเป็นขีดจำกัดเปิด/ปิดแบบไบนารีของพาธ /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);

 

คำอธิบาย

รูปภาพ SMask จะนำพาแชนเนล DeviceGray แบบ 8 บิตที่เป็นอิสระ โดยที่ความสว่างจะเป็นตัวขับเคลื่อนอัลฟาของรูปภาพสีในเวลาที่วาด (0 = โปร่งใสเต็มที่, 255 = ทึบแสงเต็มที่) HotPDF จะส่งออกทั้งสองระนาบเป็น XObjects ของรูปภาพที่บีบอัดแบบ Flate, เชื่อมโยงรายการ /SMask ของพจนานุกรมรูปภาพสีที่ XObject ของ soft-mask และส่งกลับดัชนี XImages ที่ THPDFPage.ShowImage ยอมรับโดยตรง - โค้ดสำหรับการจัดวางปลายน้ำทั้งหมดจะทำงานได้เหมือนเดิมโดยไม่มีการเปลี่ยนแปลง

 

AddImageWithSMask(Width, Height, RGB, Alpha)

- Width / Height: ขนาดพิกเซล, เหมือนกันสำหรับทั้งสองระนาบ

- RGB: Width * Height * 3 ไบต์, row-major top-down, R G B สลับกันต่อพิกเซล (ไม่มีการแพดดิ้งแถว)

- Alpha: Width * Height ไบต์, row-major top-down, ความสว่างแบบ 8 บิตต่อพิกเซล

 

AddImageWithSMask32(Bitmap32)

โอเวอร์โหลดที่สะดวกสำหรับเวิร์กโฟลว์ทั่วไป "ฉันมี PNG ที่มีอัลฟา" โดย TBitmap ต้องมี PixelFormat = pf32bit; HotPDF จะอ่านแถว BGRA ScanLine โดยตรง จัดเรียงใหม่เป็น R G B สำหรับระนาบสี และคัดลอกไบต์ A ไปยังระนาบอัลฟาก่อนจะส่งต่อไปยังจุดเข้า AddImageWithSMask ดิบ

 

ค่าที่ส่งกลับ: ดัชนีใน XImages ที่เหมือนกับดัชนีที่ AddImage ส่งกลับ; ส่งผ่านค่านี้ไปยัง THPDFPage.ShowImage เพื่อวางรูปภาพบนหน้าเอกสาร ส่งกลับค่า -1 เมื่อ StrictVersionLock เปิดใช้งานและ Version ที่ใช้งานอยู่ต่ำกว่า PDF 1.4 (มิฉะนั้นเวอร์ชันจะเพิ่มขึ้นโดยอัตโนมัติเป็น 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;

 

ดูเพิ่มเติม

AddImage, THPDFPage.ShowImage, Version, การสนับสนุนตัวกรอง PDF