Método IPrintOemUni::FilterGraphics (prcomoem.h)

O método IPrintOemUni::FilterGraphics pode ser usado com impressoras com suporte unidrv para modificar dados de linha de verificação e enviá-los para o spooler.

Sintaxe

HRESULT FilterGraphics(
  PDEVOBJ pdevobj,
  PBYTE   pBuf,
  DWORD   dwLen
);

Parâmetros

pdevobj

Ponteiro fornecido pelo chamador para uma estrutura DEVOBJ .

pBuf

Ponteiro fornecido pelo chamador para um buffer que contém dados de linha de verificação a serem impressos.

dwLen

Valor fornecido pelo chamador que representa o comprimento, em bytes, dos dados apontados pelo pBuf.

Retornar valor

O método deve retornar um dos seguintes valores:

Código de retorno Descrição
S_OK A operação foi realizada com êxito.
E_FAIL Falha na operação
E_NOTIMPL O método não está implementado.

Comentários

O método IPrintOemUni::FilterGraphics é usado para modificar os dados da linha de verificação antes de ser enviado para o spooler de impressão. O método é responsável por enviar os dados recebidos para o spooler.

O método IPrintOemUni::FilterGraphics é opcional. Se um plug-in de renderização implementar esse método, o método IPrintOemUni::GetImplementedMethod do plug-in deverá retornar S_OK quando receber "FilterGraphics" como entrada.

Se o método IPrintOemUni::FilterGraphics for implementado, Unidrv não fará spool de dados da impressora. Em vez disso, Unidrv chama esse método sempre que um buffer de dados de imagem está pronto para ser spool.

Observe que, quando esse método é implementado, o Unidrv também não compacta os dados da impressora, como normalmente acontece. Se você pretende usar a compactação Unidrv, não deverá implementar esse método. Além disso, você deve modificar IPrintOemUni::GetImplementedMethod para que ele retorne S_FALSE quando for passada a cadeia de caracteres "FilterGraphics".

O método pode executar o pós-processamento final de dados de imagem, como a remoção de ponto adjacentes ou qualquer outra operação de filtragem de fluxo de dados que o Unidrv não fornece. Em seguida, ele deve fazer spool dos dados chamando o método IPrintOemDriverUni::D rvWriteSpoolBuf .

O método IPrintOemUni::FilterGraphics é chamado pela função DrvSendPage da Unidrv. Se você quiser implementar IPrintOemUni::FilterGraphics, não deverá substituir completamente as funções DrvSendPage ou DrvNextBand da Unidrv.

Antes que a função DrvSendPage do Unidrv chame a implementação IPrintOemUni::FilterGraphics do plug-in, DrvSendPage.

  1. Se necessário, transpõe o bitmap que deve ser renderizado.

  2. Transforma um passe de saída que consiste em dados de cor em uma única matriz contígua de dados.

  3. Processa um grupo de linhas de verificação e transforma esses dados em comandos para a impressora.

  4. Define a posição X/Y e passa a linha de dados gráficos para a impressora.

Se o plug-in tiver implementado IPrintOemUni::FilterGraphics, a Unidrv chamará o plug-in com os dados da linha de verificação em vez de enviá-los para a impressora.

O método IPrintOemUni::FilterGraphics permite que um plug-in de renderização modifique os dados da linha de verificação e envie-os para o spooler. Se você implementar essa função, a Unidrv não fará spool de seus dados. Em vez disso, IPrintOemUni::FilterGraphics será chamado sempre que um buffer de dados estiver pronto para ser spool e enviado para a impressora.

Você pode usar IPrintOemUni::FilterGraphics para implementar um método de compactação especial ou para executar a manipulação de bits no fluxo de dados que é enviado para a impressora ou ambos. Em qualquer situação, o código de compactação interno do driver não é usado. IPrintOemUni::FilterGraphics é apresentado com um bloco de dados e é necessário para gerar esses dados usando a função DrvWriteSpoolBuf . O driver principal (Unidrv) não executará nenhum processamento adicional dos dados de raster depois de chamar OEMFilterGraphics.

Quando você implementa o método IPrintOemUni::FilterGraphics no plug-in, ele será usado para enviar os dados de raster diretamente para a impressora. O número de linhas de verificação em um bloco é especificado por meio do atributo PinsPerPhysPass associado ao recurso Resolução Esse atributo é opcional e, se você não especificá-lo, ele é definido como 1 (como é para a maioria das impressoras de tinta e página). Caso contrário, PinsPerPhysPass deverá ser um múltiplo de 8. Em IPrintOemUni::FilterGraphics, o parâmetro pBuf aponta para o buffer que contém os dados de raster de linha de verificação que você manipulará se necessário (por exemplo, para compactação) e, por fim, enviará para fora. O parâmetro dwLen é o comprimento do buffer para o qual o pBuf aponta.

A lista a seguir descreve vários cenários comuns para implementar IPrintOemUni::FilterGraphics:

  • Técnicas especiais de compactação

  • Manipulação de bits dos dados de raster de entrada antes de enviá-los para a impressora

IPrintOemUni::FilterGraphics finalmente envia todos os dados para a impressora usando a função DrvWriteSpoolBuf . O driver principal (Unidrv) não faz mais processamento nos dados enviados por IPrintOemUni::FilterGraphics . Se o plug-in estiver executando compactação especial ou manipulação de bits, o plug-in deverá alocar os buffers necessários para a compactação especial ou manipulação de bits. Se o plug-in não alocar seus próprios buffers e se os dados compactados forem menores que a origem, a saída substituirá o buffer de origem.

O método IPrintOemUni::FilterGraphics fornece acesso aos próprios dados da linha de verificação e oferece a capacidade de pós-processar os dados de raster.

O número de linhas de verificação é igual à altura da imagem. Por exemplo, uma espessura de 1 bit por pixel (bpp) de cada linha de verificação é igual à largura de 1 pixel, portanto, o número de linhas de verificação é igual à altura da imagem.

Para obter mais informações sobre como personalizar as operações de renderização da Unidrv, consulte Renderização Personalizada Específica unidrv.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho prcomoem.h (inclua Prcomoem.h)

Confira também

DrvNextBand

DrvSendPage

DrvWriteSpoolBuf

IPrintOemDriverUni::D rvWriteSpoolBuf

IPrintOemUni

IPrintOemUni::GetImplementedMethod

OEMFilterGraphics