function RenderPageBandedToEncoder(Width, Height, BandHeight: Integer;
Encoder: TPdfBandedImageEncoder; Rotation: TRotation = ro0;
Options: TRenderOptions = []; Color: TColor = clWhite): TPdfBandedImageReport;
| Width, Height | Integer. Tamanho da imagem de página completa em pixels, como se fosse renderizada numa só peça |
| BandHeight | Integer. Altura de cada banda em pixels. A última banda é mais baixa quando Height não é múltiplo dela |
| Encoder | TPdfBandedImageEncoder. Instância de codificador propriedade do chamador que recebe o fluxo de bandas |
| Rotation | TRotation. Rotação de apresentação aplicada à página: ro0, ro90, ro180 ou ro270 |
| Options | TRenderOptions. Flags de renderização |
| Color | TColor. Preenchimento de fundo aplicado a cada banda antes da renderização |
| Result | TPdfBandedImageReport. Contagens de bandas, linhas codificadas, bytes máximos de banda, bytes de saída e flag de conclusão |
O método conduz o mesmo ciclo de bandas que RenderPageBanded, mas em vez de um callback da aplicação empurra cada bitmap Width x altura-de-banda recém-renderizado através de uma ponte interna para os três métodos virtuais do codificador fornecido pelo chamador: BeginImage(Width, Height) corre primeiro, WriteBand(BandIndex, BandTopY, Bitmap) recebe uma chamada por banda de cima para baixo e EndImage(Completed) fecha a imagem
BandIndex é de base zero e BandTopY é o desvio em y do topo da banda em pixels da página completa, que é o que um escritor de strips precisa para colocar as linhas num ficheiro de saída. O bitmap pertence ao ciclo de renderização e é libertado imediatamente depois de WriteBand devolver, por isso um codificador que precise de manter os pixels tem de os copiar
WriteBand devolve True para continuar ou False para cancelar as bandas restantes de forma limpa. EndImage(True) só é chamado quando todas as linhas pedidas foram codificadas; uma execução cancelada ou falhada recebe EndImage(False), com as exceções desse caminho de falha suprimidas
O relatório devolvido transporta Format = pbifCustom, o número de bandas renderizadas e aceites em BandsRendered e BandsEncoded, linhas aceites em RowsEncoded, o maior bitmap de banda como Width x altura de banda x 4 bytes em PeakBandBytes, o valor de Encoder.GetBytesWritten em OutputBytes e Completed = True exatamente quando RowsEncoded = Height
O armazenamento máximo de pixels da página mantém-se num único bitmap de banda, por isso cartazes e desenhos técnicos podem ser exportados à resolução de impressão sem nunca alocar a imagem de destino completa
Passar um codificador nil, dimensões não positivas ou uma altura de banda não positiva gera EPdfError
O produto de Width e Min(BandHeight, Height) tem de se manter dentro de um quarto do intervalo endereçável de Integer, caso contrário EPdfError reporta que o buffer de banda excede o tamanho endereçável
Substitua GetBytesWritten no descendente do codificador para reportar telemetria de saída específica do codificador em OutputBytes; a implementação base devolve 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;