PDFium Delphi Component Docs

RenderPageBandedToEncoder metodas

Komponentas: TPdf  ·  Modulis: PDFium
Atvaizduoja einamąjį puslapį apkarpytose horizontaliose juostose ir kiekvienos juostos taškinę grafiką perduoda kreipėjo pateiktam juostinio paveikslo koduotuvui

Syntax

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

Width, HeightInteger. Viso puslapio paveikslo dydis pikseliais, tarsi jis būtų atvaizduotas vienu gabalu
BandHeightInteger. Kiekvienos juostos aukštis pikseliais. Paskutinė juosta trumpesnė, kai Height nėra jos kartotinis
EncoderTPdfBandedImageEncoder. Kreipėjui priklausantis koduotuvo egzempliorius, gaunantis juostų srautą
RotationTRotation. Puslapiui taikomas rodymo sukimas: ro0, ro90, ro180 arba ro270
OptionsTRenderOptions. Atvaizdavimo požymiai
ColorTColor. Fono užpildas, taikomas kiekvienai juostai prieš atvaizdavimą
ResultTPdfBandedImageReport. Juostų skaičiai, užkoduotos eilutės, didžiausia juostos baitų reikšmė, išvesties baitai ir užbaigtimo požymis

Description

Metodas varo tą patį juostinimo ciklą kaip RenderPageBanded, bet vietoje programos atgalinio iškvietimo kiekvieną ką tik atvaizduotą Width x juostos aukščio taškinę grafiką per vidinį tiltą perduoda trims kreipėjo pateikto koduotuvo virtualiems metodams: pirmiausia vyksta BeginImage(Width, Height), WriteBand(BandIndex, BandTopY, Bitmap) gauna po vieną kreipinį kiekvienai juostai iš viršaus į apačią, o EndImage(Completed) uždaro paveikslą

BandIndex skaičiuojamas nuo nulio, o BandTopY yra juostos viršaus y poslinkis viso puslapio pikseliais, ko juostelių rašytojui reikia, kad eilutės patektų į tinkamą išvesties failo vietą. Taškinė grafika priklauso atvaizdavimo ciklui ir atlaisvinama iškart grįžus WriteBand, todėl koduotuvas, kuriam reikia pikselių išsaugoti, privalo juos nukopijuoti

WriteBand grąžina True, norint tęsti, arba False, norint tvarkingai atšaukti likusias juostas. EndImage(True) kviečiamas tik tada, kai užkoduota kiekviena pageidauta eilutė; atšauktas arba nepavykęs paleidimas gauna EndImage(False), o šio nesėkmės kelio išimtys slopinamos

Grąžinamoji ataskaita neša Format = pbifCustom, atvaizduotų ir priimtų juostų skaičių BandsRendered ir BandsEncoded, priimtas eilutes RowsEncoded, didžiausią juostos taškinę grafiką kaip Width x juostos aukštį x 4 baitus PeakBandBytes, Encoder.GetBytesWritten reikšmę OutputBytes ir Completed = True būtent tada, kai RowsEncoded = Height

Didžiausia puslapio pikselių atmintis lieka vienoje juostos taškinėje grafikoje, todėl plakatai ir inžineriniai brėžiniai gali būti eksportuojami spausdinimo raiškoje niekada neatskiriant viso paskirties paveikslo

Remarks

Perdavus nil koduotuvą, neteigiamus matmenis arba neteigiamą juostos aukštį, iškeliama EPdfError

Width ir Min(BandHeight, Height) sandauga turi tilpti į ketvirtadalį pasiekiamo Integer intervalo, priešingu atveju EPdfError praneša, kad juostos buferis viršija pasiekiamą dydį

Koduotuvo palikuonyje perrašykite GetBytesWritten, kad į OutputBytes patektų kodekui būdinga išvesties telemetrija; bazinė realizacija grąžina 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