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
- Os valores
/Matrixde Form XObject são compostos com a matriz de transformação atual antes que o conteúdo do grupo seja executado - Grupos isolados usam um plano alfa separado para que o conteúdo preto permaneça distinguível de pixels transparentes
- Grupos knockout substituem a contribuição anterior do grupo em áreas pintadas sobrepostas
- O conteúdo do grupo começa do blend mode Normal: o blend mode, o alfa constante e a soft mask em vigor em
Dose aplicam ao grupo como um todo - Um grupo pintado com outro blend mode mescla a própria cor e o próprio alfa dele com o backdrop; um grupo não isolado cujos próprios estados gráficos mesclam normalmente é desenhado sobre preto e sobre branco para recuperar o alfa dele
- Grupos são divididos em blocos limitados de 768 pixels enquanto pintura GDI, fase de meio-tom, grupos aninhados, máscaras suaves e composição retêm coordenadas absolutas de dispositivo
- Os bytes do Form são decodificados e tokenizados uma vez antes da execução do bloco, e máscaras temporárias locais do bloco são liberadas antes do próximo bloco
- Grupos aninhados são suportados com recursão limitada e restauração completa do estado gráfico após cada invocação de Form
Máscaras suaves
- As máscaras
/S /Alphae/S /Luminositysão avaliadas a partir do mask group - O mask group é desenhado com mesclagem Normal, seja qual for o blend mode que o estado gráfico que define a máscara carrega
- Máscaras de luminosidade resolvem o
/CSdo grupo de transparência e ponderam a cor resolvida com a aproximação PDF DeviceGray, como viewers comuns fazem; definaRenderColorimetricLuminosityMaskspara usar Y CIE colorimétrico para espaços baseados em CIE /BCé validado contra a contagem exata de componentes do espaço de mesclagem e fornece a luminosidade convertida fora do conteúdo de máscara pintado- A pintura Separation e DeviceN é convertida por meio de seu espaço alternativo Lab ou ICCBased para que componentes de cor especial nunca vazem para uma máscara suave
- Funções de transferência
/TRsuportam funções amostradas, exponenciais, de costura e calculadoras PostScript por meio do avaliador de funções compartilhado /SMask /Nonelimpa a máscara ativa, eqouQpreservam o estado da máscara normalmente- Máscaras compiladas são reutilizadas apenas quando o dicionário de origem, a matriz de transformação atual e a intenção de renderização coincidem
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;