Função DrvStretchBltROP (winddi.h)
A função DrvStretchBltROP executa uma transferência de bloco de bits alongamento usando um ROP.
Sintaxe
BOOL DrvStretchBltROP(
[in, out] SURFOBJ *psoDest,
[in, out] SURFOBJ *psoSrc,
[in, optional] SURFOBJ *psoMask,
[in] CLIPOBJ *pco,
[in, optional] XLATEOBJ *pxlo,
[in, optional] COLORADJUSTMENT *pca,
[in] POINTL *pptlHTOrg,
[in] RECTL *prclDest,
[in] RECTL *prclSrc,
[in, optional] POINTL *pptlMask,
[in] ULONG iMode,
[in] BRUSHOBJ *pbo,
[in] DWORD rop4
);
Parâmetros
[in, out] psoDest
Ponteiro para uma estrutura SURFOBJ que descreve a superfície na qual desenhar.
[in, out] psoSrc
Ponteiro para uma estrutura SURFOBJ que descreve a superfície de origem para a transferência de bloco de bits.
[in, optional] psoMask
Ponteiro para uma estrutura SURFOBJ que define uma máscara para a origem. A máscara é definida por um mapa lógico, que é um bitmap com um bit por pixel. Normalmente, uma máscara limita a área a ser modificada na superfície de destino. Essa máscara é sempre do mesmo tamanho que a superfície de origem.
[in] pco
Ponteiro para uma estrutura CLIPOBJ que limita a área a ser modificada no destino. As rotinas de serviço CLIPOBJ_Xxx são fornecidas para enumerar a região de clipe como um conjunto de retângulos.
Sempre que possível, a GDI simplifica o recorte envolvido. No entanto, ao contrário do DrvBitBlt, DrvStretchBltROP pode ser chamado com um único retângulo de recorte. Isso impede erros de arredondamento ao recortar a saída.
[in, optional] pxlo
Ponteiro para uma estrutura XLATEOBJ que especifica como os índices de cor devem ser convertidos entre as superfícies de origem e destino. Se pxlo for NULL, nenhuma tradução será necessária.
Essa estrutura XLATEOBJ também pode ser consultada para localizar a cor RGB de qualquer índice de origem. Uma transferência de bloco de bits ampliada de alta qualidade precisará interpolar cores em alguns casos.
[in, optional] pca
Ponteiro para uma estrutura COLORADJUSTMENT que define os valores de ajuste de cor a serem aplicados ao bitmap de origem antes de alongar os bits. Para obter mais informações, consulte a documentação do SDK do Microsoft Windows.
[in] pptlHTOrg
Ponteiro para uma estrutura POINTL que define a origem do pincel de meio tom na superfície de destino. Ao usar pincéis de meio tom, o driver deve alinhar o pixel superior esquerdo do pincel com esse ponto e repetir o pincel de acordo com suas dimensões. O driver deve ignorar esse parâmetro se o parâmetro rop4 não exigir um padrão.
[in] prclDest
Ponteiro para uma estrutura RECTL que define a área retangular a ser modificada. Esse retângulo é especificado no sistema de coordenadas da superfície de destino e é definido por dois pontos: superior esquerdo e inferior direito. Os dois pontos que definem o retângulo nem sempre são bem ordenados, o que significa que as coordenadas do segundo ponto não são necessariamente maiores do que as do primeiro ponto. O driver deve trocar os dois valores x e/ou os dois valores y se o retângulo de destino não estiver bem ordenado.
O retângulo é exclusivo inferior direito; ou seja, as bordas inferior e direita não fazem parte da cópia.
DrvStretchBltROP nunca é chamado com um retângulo de destino vazio.
[in] prclSrc
Ponteiro para uma estrutura RECTL que define a área a ser copiada. Esse retângulo é especificado no sistema de coordenadas da superfície de origem e é definido por dois pontos: superior esquerdo e inferior direito. Os dois pontos que definem o retângulo são sempre bem ordenados.
O retângulo é exclusivo inferior direito; ou seja, suas bordas inferior e direita não fazem parte da cópia.
O driver deve mapear esse retângulo para o retângulo definido por prclDest.
[in, optional] pptlMask
Ponteiro para uma estrutura POINTL que define um pixel na máscara para a qual prclMask aponta. Esse pixel corresponde ao pixel superior esquerdo no retângulo de origem ao qual prclSrc aponta. O driver deve ignorar esse parâmetro se nenhuma máscara for especificada.
[in] iMode
Especifica como os pixels de origem são combinados para obter pixels de saída. O modo HALFTONE é mais lento do que os outros modos, mas produz imagens de maior qualidade. Esse parâmetro pode usar um dos valores a seguir:
Valor | Significado |
---|---|
BLACKONWHITE | Em uma transferência de bloco de bits reduzida, os pixels devem ser combinados com uma operação AND booliana. Em uma transferência de bloco de bits alongada, os pixels devem ser replicados. |
COLORONCOLOR | Em uma transferência de bloco de bits reduzida, pixels suficientes devem ser ignorados para que os pixels não precisem ser combinados. Em uma transferência de bloco de bits alongada, os pixels devem ser replicados. |
HALFTONE | O driver pode usar grupos de pixels na superfície de saída para aproximar melhor a cor ou o nível cinza da entrada. |
WHITEONBLACK | Em uma transferência de bloco de bits reduzida, os pixels devem ser combinados com uma operação OR booliana. Em uma transferência de bloco de bits alongada, os pixels devem ser replicados. |
[in] pbo
Ponteiro para a estrutura BRUSHOBJ a ser usada para definir o padrão para a transferência de bloco de bits. A rotina de serviço BRUSHOBJ_pvGetRbrush da GDI recupera a realização do pincel pelo dispositivo. O driver poderá ignorar esse parâmetro se o parâmetro rop4 não exigir um padrão.
[in] rop4
Representa uma operação de varredura que define como os pixels de máscara, padrão, origem e destino são combinados para gravar um pixel de saída na superfície de destino.
Esta é uma operação de varredura quaternária, que é uma extensão natural da operação rop3 ternária usual. Um Rop4 tem 16 bits relevantes, que são semelhantes aos 8 bits definidos de um Rop3. (Os outros bits redundantes do Rop3 são ignorados.) A maneira mais simples de implementar um Rop4 é considerar seus 2 bytes separadamente. O byte inferior especifica um Rop3 que deve ser calculado onde quer que a máscara para a qual psoMask aponta seja 1. O byte alto especifica um Rop3 que pode ser calculado e aplicado onde quer que a máscara seja zero.
Retornar valor
DrvStretchBltROP deve retornar TRUE após o sucesso. Caso contrário, ele deverá relatar um código de erro e retornar FALSE.
Comentários
O mapeamento é definido por prclSrc e prclDest. Os pontos especificados em prclDest e prclSrc estão em coordenadas de inteiro, que correspondem aos centros de pixel. Um retângulo definido por dois desses pontos é considerado um retângulo geométrico com dois vértices cujas coordenadas são os pontos determinados, mas com 0,5 subtraído de cada coordenada. (As estruturas POINTL são notação abreviada para especificar esses vértices de coordenadas fracionárias.)
Opcionalmente, o driver pode implementar DrvStretchBltROP. Se o driver conectar essa chamada, ele poderá chamar EngStretchBltROP para executar essas operações de ampliação blit às quais ele não dá suporte.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Área de Trabalho |
Cabeçalho | winddi.h (inclua Winddi.h) |