PDFium Delphi Component Docs

RenderPageBandedToEncoder metodă

Component: TPdf  ·  Unit: PDFium
Randează pagina curentă în benzi orizontale decupate și transmite fiecare bitmap de bandă către un encoder de imagini pe benzi furnizat de apelant

Syntax

function RenderPageBandedToEncoder(Width, Height, BandHeight: Integer;
  Encoder: TPdfBandedImageEncoder; Rotation: TRotation = ro0;
  Options: TRenderOptions = []; Color: TColor = clWhite): TPdfBandedImageReport;

Width, HeightInteger. Dimensiunea imaginii complete de pagină, în pixeli, ca și cum ar fi randată dintr-o bucată
BandHeightInteger. Înălțimea fiecărei benzi, în pixeli. Ultima bandă este mai scurtă când Height nu este multiplu al ei
EncoderTPdfBandedImageEncoder. Instanță de encoder deținută de apelant, care primește fluxul de benzi
RotationTRotation. Rotația de afișare aplicată paginii: ro0, ro90, ro180 sau ro270
OptionsTRenderOptions. Fanioanele de randare
ColorTColor. Umplutura de fundal aplicată fiecărei benzi înainte de randare
ResultTPdfBandedImageReport. Contoare de benzi, rânduri codificate, vârf de octeți per bandă, octeți de ieșire și fanionul de finalizare

Description

Metoda conduce aceeași buclă de bandare ca RenderPageBanded, dar în locul unui callback de aplicație transmite fiecare bitmap proaspăt randat de Width x înălțime-de-bandă printr-o punte internă către cele trei metode virtuale ale encoder-ului furnizat de apelant: BeginImage(Width, Height) rulează primul, WriteBand(BandIndex, BandTopY, Bitmap) primește câte un apel per bandă, de sus în jos, iar EndImage(Completed) închide imaginea

BandIndex este bazat pe zero, iar BandTopY este offsetul y al vârfului benzii în pixeli la scara paginii complete, ceea ce îi trebuie unui scriitor de benzi pentru a plasa rândurile în fișierul de ieșire. Bitmap-ul aparține buclei de randare și este eliberat imediat după ce WriteBand revine, deci un encoder care trebuie să păstreze pixelii trebuie să îi copieze

WriteBand returnează True pentru a continua sau False pentru a anula curat benzile rămase. EndImage(True) este apelat doar când fiecare rând cerut a fost codificat; o rulare anulată sau eșuată primește EndImage(False), cu excepțiile de pe acest traseu de eșec suprimate

Raportul returnat poartă Format = pbifCustom, numărul de benzi randate și acceptate în BandsRendered și BandsEncoded, rândurile acceptate în RowsEncoded, cel mai mare bitmap de bandă ca Width x înălțime bandă x 4 octeți în PeakBandBytes, valoarea lui Encoder.GetBytesWritten în OutputBytes și Completed = True exact când RowsEncoded = Height

Stocarea de vârf a pixelilor paginii rămâne la un singur bitmap de bandă, deci posterele și desenele tehnice pot fi exportate la rezoluție de imprimare fără a aloca vreodată imaginea destinație completă

Remarks

Transmiterea unui encoder nil, a unor dimensiuni nepozitive sau a unei înălțimi de bandă nepozitive ridică EPdfError

Produsul dintre Width și Min(BandHeight, Height) trebuie să rămână în interiorul unui sfert din intervalul adresabil Integer, altfel EPdfError raportează că bufferul de bandă depășește dimensiunea adresabilă

Suprascrieți GetBytesWritten în descendentul encoder-ului pentru a raporta telemetrie de ieșire specifică encoder-ului în OutputBytes; implementarea de bază returnează 0

Example

type
  TRawStripEncoder = class(TPdfBandedImageEncoder)
  public
    procedure BeginImage(Width, Height: Integer); override;
    function WriteBand(BandIndex, BandTopY: Integer;
      Bitmap: TBitmap): Boolean; override;
    procedure EndImage(Completed: Boolean); override;
  end;

Encoder := TRawStripEncoder.Create;
try
  Report := Pdf.RenderPageBandedToEncoder(4960, 7016, 512, Encoder);
  LogBandedExport(Report.BandsEncoded, Report.PeakBandBytes);
finally
  Encoder.Free;
end;

See Also

RenderPageBanded, RenderPageBandedToStream, RenderPage, RenderTile