function RenderPageBandedToEncoder(Width, Height, BandHeight: Integer;
Encoder: TPdfBandedImageEncoder; Rotation: TRotation = ro0;
Options: TRenderOptions = []; Color: TColor = clWhite): TPdfBandedImageReport;
| Width, Height | Integer. Dimensiunea imaginii complete de pagină, în pixeli, ca și cum ar fi randată dintr-o bucată |
| BandHeight | Integer. Înălțimea fiecărei benzi, în pixeli. Ultima bandă este mai scurtă când Height nu este multiplu al ei |
| Encoder | TPdfBandedImageEncoder. Instanță de encoder deținută de apelant, care primește fluxul de benzi |
| Rotation | TRotation. Rotația de afișare aplicată paginii: ro0, ro90, ro180 sau ro270 |
| Options | TRenderOptions. Fanioanele de randare |
| Color | TColor. Umplutura de fundal aplicată fiecărei benzi înainte de randare |
| Result | TPdfBandedImageReport. Contoare de benzi, rânduri codificate, vârf de octeți per bandă, octeți de ieșire și fanionul de finalizare |
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ă
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
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;