Semântica avançada de renderização

A renderização de páginas carregadas preserva o estado de Form XObject aninhado enquanto aplica grupos de transparência, máscaras suaves, procedimentos de glifo Tipo 3 e decodificação de regiões de imagem visíveis com reconhecimento de resolução

Traços de path tracejados

A renderização nativa de paths preserva dash arrays completas e a fase delas, incluindo arrays de comprimento ímpar, comprimentos fracionários e dashes pintados de comprimento zero com pontas round ou square; o padrão de tracejado recomeça em cada subpath

Traços de cor sólida e clips de stroke com padrão de gradiente compartilham um mesmo caminho limitado de geometria de dashes, retêm as junções dentro de seções pintadas contínuas e unem seções pintadas através do ponto inicial de um contorno fechado

Os comprimentos de dash retêm a escala média da transformação atual do renderizador, enquanto a divisão de curvas usa achatamento adaptativo no espaço de dispositivo; o preenchimento de fill e o clipping pendente continuam usando o path original sem divisão

Grupos de transparência

Máscaras suaves

Funções de transferência e amostradas

/TR2 tem precedência sobre /TR; uma única função vale para todos os canais de saída RGB, e um array de quatro funções aplica as três primeiras entradas de forma independente, preservando as entradas /Identity e /Default

Aplicar um novo estado de transferência substitui cada canal atomicamente, de modo que entradas de identidade não podem herdar valores de consulta de um estado gráfico anterior

Funções amostradas Tipo 0 suportam uma a quatro dimensões de entrada e saída, valores /BitsPerSample 1, 2, 4, 8, 12, 16, 24 e 32, mapeamentos /Encode invertidos ou diretos, faixas /Decode independentes, interpolação multilinear, interpolação cúbica multidimensional e splines cúbicos naturais para dados unidimensionais /Order 3

Bytes de amostra decodificados, dimensões validadas, mapeamentos e derivadas cúbicas compartilham um LRU de oito entradas limitado a 64 MiB por thread de renderização, enquanto funções superdimensionadas ou malformadas falham sem substituir parcialmente a tabela de consulta de transferência ativa

Telas de meio-tom

Arrays de limiar Tipo 6, Tipo 10 e Tipo 16 executam diretamente com comprimentos decodificados exatos, limiares de 16 bits big-endian, comparação de componentes aditivos e tiras periódicas compactas que evitam expandir telas angulares ou de dois retângulos

Dicionários Tipo 5 selecionam telas independentes /Red, /Green e /Blue com fallbacks /Gray e /Default obrigatórios, enquanto cada tela selecionada pode substituir a função de transferência global

Bytes de limiar validados e sua geometria normalizada compartilham um LRU de 64 entradas limitado a 64 MiB por renderizador, e dimensões malformadas, alocações superdimensionadas, dicionários Tipo 5 aninhados ou incompatibilidades de comprimento de carga deixam o estado completo de tela ativa no modo de tom contínuo

Glifos Tipo 3

CharProcs Tipo 3 passam pelo mecanismo completo de operadores de conteúdo com o escopo de recursos atual do dicionário de fonte, suporte a Form, recorte, imagens, padrões e recursão limitada

d0 e d1 fornecem métricas de glifo enquanto um procedimento d1 mantém a cor selecionada pelo chamador conforme exigido pelo modelo de imagem PDF

CharProcs repetidos reutilizam listas de exibição decodificadas e tokenizadas quando fonte, glifo, matriz linear de dispositivo e estado de cor coincidem; a tradução permanece dinâmica para que caracteres repetidos em posições diferentes compartilhem uma entrada

O LRU por renderizador retém no máximo 256 entradas e 131.072 tokens, ignora qualquer CharProc acima de 16.384 tokens e relata seu comportamento por meio de GetLastType3GlyphCacheStats

Regiões de imagem recortadas e reduzidas

XObjects de imagem alinhados aos eixos solicitam apenas limites de origem visíveis e passam o tamanho visível de pixel de dispositivo para o caminho de decodificação

Uma imagem com uma soft mask é decodificada por inteiro no tamanho em que é desenhada, e a máscara dela no mesmo tamanho, de modo que a máscara permaneça alinhada com a imagem enquanto o clipping limita o que é pintado; máscaras JPEG usam o decodificador DCT de tamanho reduzido

Ao renderizar, uma região decodificada com pelo menos o dobro do tamanho desenhado em ambas as direções é reduzida exatamente ao tamanho desenhado por média de área antes de ser desenhada ou colocada em cache; uma imagem grande desenhada pequena então cabe no cache de decode, de modo que um grupo desenhado duas vezes ou uma página repetida a reutiliza, e a soft mask dela é aplicada pixel a pixel nesse tamanho. Stencil image masks mantêm a resolução total delas, e os métodos públicos de decodificação de região retornam os tamanhos documentados deles

JPEG 2000 combina a API de região nativa do decodificador com um nível de resolução de potência de dois selecionado para atender às duas dimensões de destino antes da reconstrução de wavelet e expansão raster

Codestreams JPEG 2000 endereçáveis por bloco também podem decodificar um bloco validado diretamente por meio de THPDFJpeg2000Decoder.LoadTileFromByteArray, com metadados de grade de blocos e limites de bytes de saída expostos pelo decodificador

Quando uma região nativa cruza vários blocos independentes, LoadRegionFromByteArrayParallel atribui estado OpenJPEG privado por trabalhador e compõe rasters concluídos em ordem determinística de linha principal; cancelamento, limites de saída e o orçamento efetivo de pico de memória podem interromper o agendamento ou selecionar o fallback sequencial

Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
  Canvas.Draw(0, 0, Region);
finally
  Region.Free;
end;

APIs relacionadas