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

O IPrintOemUni::ImageProcessing método pode ser usado com impressoras com suporte unidrv para modificar dados de bitmap de imagem, a fim de executar formatação de cor ou halftoning. O método pode retornar o bitmap modificado para Unidrv ou enviá-lo diretamente para o spooler de impressão.

Sintaxe

HRESULT ImageProcessing(
        PDEVOBJ           pdevobj,
        PBYTE             pSrcBitmap,
        PBITMAPINFOHEADER pBitmapInfoHeader,
        PBYTE             pColorTable,
        DWORD             dwCallbackID,
        PIPPARAMS         pIPParams,
  [out] OUT PBYTE         *ppbResult
);

Parâmetros

pdevobj

Ponteiro fornecido pelo chamador para uma estrutura DEVOBJ .

pSrcBitmap

Ponteiro fornecido pelo chamador para um DIB de entrada.

pBitmapInfoHeader

Ponteiro fornecido pelo chamador para uma estrutura BITMAPINFOHEADER que descreve o bitmap apontado por pSrcBitmap. A estrutura BITMAPINFOHEADER é descrita na documentação do SDK do Microsoft Windows.

pColorTable

Ponteiro fornecido pelo chamador para uma tabela de cores. Esse parâmetro será usado somente se o formato de saída for de oito bits por pixel. Para obter mais informações, consulte a seção Comentários a seguir.

Ao interpretar um bitmap, você deve examinar a tabela de cores. O Unidrv pode modificar as cores em um bitmap, mas também fará ajustes correspondentes na tabela de cores, resultando em nenhuma alteração líquida. No entanto, se você ignorar as alterações da tabela de cores e examinar apenas o bitmap, uma imagem poderá não ser impressa corretamente. Para obter um exemplo, consulte a discussão do parâmetro pPaletteEntry em HT_Get8BPPMaskPalette.

dwCallbackID

Valor fornecido pelo chamador atribuído ao atributo *IPCallbackID da opção selecionada no momento para o recurso ColorMode. Para obter mais informações, consulte a seção Comentários a seguir.

pIPParams

Ponteiro fornecido pelo chamador para uma estrutura IPPARAMS .

[out] ppbResult

Ponteiro para um local de memória que contém o endereço de um buffer. O conteúdo do buffer depende de onde o DIB convertido deve ser enviado.

Se esse método pretende enviar o DIB convertido de volta para Unidrv e é bem-sucedido na conversão, ele deve definir *ppbResult como o endereço do buffer que contém o DIB convertido e deve retornar S_OK. Se a conversão falhar, o método deverá definir *ppbResult como NULL e retornar E_FAIL.

Se esse método pretende enviar o DIB convertido para o spooler e é bem-sucedido na conversão, o método deve definir *ppbResult como TRUE e deve retornar S_OK. Se a conversão falhar, o método deverá definir *ppbResult como FALSE e retornar E_FAIL. Para obter mais informações, consulte a discussão dos atributos *DevBPP e *DevNumOfPlanes na seção Comentários.

Retornar valor

O método deve retornar um dos valores a seguir.

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.
 

Características do bitmap de origem

Características do bitmap de destino

Comentários

O IPrintOemUni::ImageProcessing método é usado para modificar bitmaps de imagem antes de serem enviados para o spooler de impressão. Sua finalidade é fornecer suporte personalizado para modos de cor e métodos de halftoning sem suporte do Unidrv. Um driver de impressora que envia um bitmap para o spooler de impressão (em vez de enviá-lo de volta para Unidrv) deve definir os atributos *DevBPP e *DevNumOfPlanes como zero no arquivo GPD da impressora.

Se o método for implementado e se a entrada de arquivo GPD para o formato de cor atual contiver um atributo *IPCallbackID , Unidrv chamará o método sempre que um bitmap estiver disponível. A chamada é feita depois que a GDI renderiza o bitmap, que é enviado para o spooler. (Para obter informações sobre o atributo *IPCallbackID , consulte Atributos de opção para o recurso ColorMode.)

Se o modo de cor atual, conforme especificado por dwCallbackID, for compatível com Unidrv, o IPrintOemUni::ImageProcessing método deverá executar operações de halftoning no bitmap recebido e retorná-lo para Unidrv para spooling. Se o modo de cor atual for aquele ao qual o Unidrv não dá suporte, o método deverá executar operações de halftoning e, em seguida, fazer spool do bitmap.

Se o método estiver executando apenas operações de halftoning, ele deverá fazer o seguinte:

  • Execute operações de halftoning nos dados, conforme indicado pelo membro pHalftoneOption da estrutura IPPARAMS .
  • Retorne os dados de imagem modificados para Unidrv colocando-os em um buffer e fornecendo o endereço do buffer como o valor retornado do método. O buffer retornado pode ser aquele apontado por pSrcBitmap ou pode ser aquele alocado localmente.
Para obter mais informações sobre como personalizar operações de halftoning em Unidrv, consulte Halftoning personalizado.

Para manipular a formatação de cores personalizada, o IPrintOemUni::ImageProcessing método deve fazer o seguinte:

Para obter mais informações sobre como personalizar operações de formatação de cores em Unidrv, consulte Formatos de cor personalizados.

O parâmetro dwCallbackID indica o tipo de formatação de cor, se houver, que deve ser executada. Dentro do arquivo GPD da impressora, cada entrada *Option para o recurso ColorMode descreve um formato de cor. Se o formato exigir processamento IPrintOemUni::ImageProcessing pelo método , sua entrada *Option deverá conter um atributo *IPCallbackID . Quando Unidrv chama o IPrintOemUni::ImageProcessing método , ele fornece o valor do atributo associado à opção selecionada no momento para o recurso ColorMode. Esse valor é o valor do parâmetro dwCallbackID .

Se o IPrintOemUni::ImageProcessing método estiver executando operações de formatação de cores e spooling de dados de imagem ou apenas executando operações de halftoning e retornando bitmaps processados para Unidrv, ele deve exportar um método IPrintOemUni::MemoryUsage se alocar quantidades significativas de memória para bitmaps de destino ou outras finalidades. Caso contrário, o desempenho do sistema poderá ser degradado.

Se o método for implementado, ele será chamado para cada região de varredura na página. No entanto, se uma região estiver em branco, o membro bBlankBand da estrutura IPPARAMS será definido como TRUE, o que indica que o bloco está em branco e os dados são inválidos. Como uma banda pode ser dividida em blocos alternados de regiões em branco e não vazias para otimizar o desempenho, o tamanho do bloco nem sempre corresponde ao tamanho da banda.

O bitmap de origem descrito por pSrcBitmap e pBitmapInfoHeader tem as seguintes características:

  • O conteúdo DIB é ordenado de cima para baixo e descompactado.
  • O formato de dados é aquele listado em Manipulando formatos de cor.
  • Se o formato exigir uma tabela de cores, a tabela será apontada por pColorTable.
  • Os dados de cor estão no formato PRIMARY_ORDER_CBA, conforme explicado na descrição do membro ulPrimaryOrder da estrutura GDIINFO . Em outras palavras, se o formato de cor for RGB ou CMY, os n bits menos significativos deverão conter o valor azul ou amarelo, os próximos n bits deverão conter o valor verde ou magenta e os próximos n bits deverão conter o valor vermelho ou ciano. Os bits não utilizados estão na posição mais significativa. Se o formato usar 4 bits por pixel, n será 1. Para 24 bits por pixel, n é 8, conforme mostrado na figura a seguir. Para CYMK, o quarto grupo de n bits contém preto.

Formato PRIMARY_ORDER_CBA
A figura anterior ilustra os dados de cor no formato PRIMARY_ORDER_CBA para dois pixels, com 24 bits de dados de cor por pixel. Movendo de endereços de memória baixa para endereços de memória alta, há oito bits de dados azuis, depois oito bits de dados verdes e, em seguida, oito bits de dados vermelhos, após os quais o padrão se repete. Isso também é conhecido como ordem de saída do dispositivo BGR.
Para operações de halftoning, nas quais um bitmap processado é retornado para Unidrv, o bitmap retornado deve ter as seguintes características:
  • O conteúdo DIB deve ser ordenado de cima para baixo e descompactado.
  • O formato de dados deve ser aquele listado em Manipulando formatos de cor e deve ser compatível com os atributos *DevBPP e *DevNumOfPlanes do formato de cor identificado por dwCallbackID. (Para obter informações sobre esses atributos, consulte Atributos de opção para o recurso ColorMode.)
  • Se o formato exigir uma tabela de cores, a tabela deverá ser criada e seu endereço deverá ser retornado em pColorTable.
  • Os dados de cor devem ser retornados no formato PRIMARY_ORDER_CBA, conforme descrito para o bitmap de origem.
  • A estrutura BITMAPINFOHEADER especificada por pBitmapInfoHeader deve descrever os bitmaps de entrada e saída. O IPrintOemUni::ImageProcessing método não deve alterar o conteúdo da estrutura.
O IPrintOemUni::ImageProcessing método é 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 "ImageProcessing" como entrada.

Requisitos

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

Confira também

HT_Get8BPPMaskPalette

IPrintOemUni

IPrintOemUni::FilterGraphics