PDFium Delphi Component Docs

RenderPageBandedToEncoder metoda

Komponenta: TPdf  ·  Jednotka: PDFium
Vykreslí aktuální stránku po oříznutých vodorovných pásech a každou bitmapu pásu předá pásovému obrazovému kodeku dodanému volajícím

Syntaxe

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

Width, HeightInteger. Velikost celého obrázku stránky v pixelech, jako by byl vykreslen na jeden kus
BandHeightInteger. Výška každého pásu v pixelech. Když Height není jeho násobek, je poslední pás kratší
EncoderTPdfBandedImageEncoder. Instance kodeku ve vlastnictví volajícího, která proud pásů přijímá
RotationTRotation. Otočení zobrazení aplikované na stránku: ro0, ro90, ro180 nebo ro270
OptionsTRenderOptions. Příznaky vykreslování
ColorTColor. Výplň pozadí nanesená na každý pás před vykreslením
ResultTPdfBandedImageReport. Počty pásů, zakódované řádky, vrcholné bajty pásu, výstupní bajty a příznak dokončení

Popis

Metoda řídí stejnou pásovou smyčku jako RenderPageBanded, ale místo aplikačního zpětného volání protlačuje každou čerstvě vykreslenou bitmapu Width x výška pásu interním mostem do tří virtuálních metod kodeku dodaného volajícím: BeginImage(Width, Height) běží první, WriteBand(BandIndex, BandTopY, Bitmap) dostane po jednom volání pro každý pás shora dolů a EndImage(Completed) obrázek uzavře

BandIndex se čísluje od nuly a BandTopY je y-offset horního okraje pásu v pixelech celé stránky, což je přesně to, co zapisovač pruhů potřebuje k umístění řádků ve výstupním souboru. Bitmapa patří vykreslovací smyčce a uvolní se hned poté, co WriteBand vrátí, takže kodek, který si pixely chce ponechat, je musí zkopírovat

WriteBand vrací True pro pokračování nebo False pro čisté zrušení zbývajících pásů. EndImage(True) se volá jen tehdy, když se zakódoval každý požadovaný řádek; zrušený nebo neúspěšný běh dostane EndImage(False), přičemž výjimky z této chybové cesty se potlačí

Vrácený přehled nese Format = pbifCustom, počet vykreslených a přijatých pásů v BandsRendered a BandsEncoded, přijaté řádky v RowsEncoded, největší bitmapu pásu jako Width x výška pásu x 4 bytes v PeakBandBytes, hodnotu Encoder.GetBytesWritten v OutputBytes a Completed = True přesně tehdy, když RowsEncoded = Height

Vrcholné úložiště pixelů stránky zůstává na jedné bitmapě pásu, takže plakáty a technické výkresy lze exportovat v tiskovém rozlišení, aniž by se kdykoli alokoval celý cílový obrázek

Poznámky

Předání nil kodeku, nekladných rozměrů nebo nekladné výšky pásu vyvolá EPdfError

Součin Width a Min(BandHeight, Height) musí zůstat v jedné čtvrtině adresovatelného rozsahu Integer, jinak EPdfError nahlásí, že buffer pásu překračuje adresovatelnou velikost

GetBytesWritten v potomku kodeku přepište, aby se telemetrie výstupu specifická pro kodek dostala do OutputBytes; základní implementace vrací 0

Příklad

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;

Viz také

RenderPageBanded, RenderPageBandedToStream, RenderPage, RenderTile