Tipos de Superfície
Os tipos surface podem ser exibidos no contexto de como eles são tratados. Os seguintes tipos existem:
Superfícies gerenciadas pelo mecanismo
Superfícies gerenciadas pelo dispositivo (bitmaps de formato padrão)
Superfícies gerenciadas pelo dispositivo (bitmaps não padrão)
Superfícies gerenciadas pelo mecanismo
Uma superfície gerenciada pelo mecanismo:
É criado e gerenciado pela GDI.
É criado como um DIB (bitmap independente do dispositivo) em um dos formatos DIB padrão: de cima para baixo, no qual a origem está no canto superior esquerdo ou de baixo para cima, em que a origem está no canto inferior esquerdo.
É do tipo STYPE_BITMAP.
Não tem um identificador de dispositivo correspondente para uma superfície.
Um bitmap de formato padrão é um bitmap de plano único e empacotado (em que os dados de cada pixel são armazenados de maneira contígua). Cada linha de verificação do bitmap é alinhada em um limite de quatro bytes.
Bitmaps criados na função EngCreateBitmap estão no formato DIB. Um bitmap deve estar no formato DIB para que o mecanismo o gerencie.
Superfícies gerenciadas pelo dispositivo (Bitmaps de formato padrão)
Uma superfície gerenciada pelo dispositivo:
É criado por uma chamada para a função DrvCreateDeviceBitmap do driver de dispositivo.
Tem um identificador de dispositivo associado a uma superfície (DHSURF; para obter mais informações, consulte SURFOBJ).
Pode ser opaco ou nãopaque.
Uma superfície gerenciada por dispositivo opaco é aquela para a qual a GDI não tem nenhuma informação sobre o formato bitmap nem uma referência aos bits no bitmap. Por esses motivos, o driver deve dar suporte, no mínimo, às funções DrvBitBlt, DrvTextOut e DrvStrokePath . O tipo de tal superfície é STYPE_DEVBITMAP.
Uma superfície gerenciada por dispositivo nãopaque é aquela para a qual a GDI tem informações sobre o formato bitmap e sabe o local dos bits dentro do bitmap. Por isso, o driver não precisa implementar nenhuma operação de desenho, adiando todas elas para a GDI. O tipo de tal superfície é SYTPE_BITMAP.
Para que um driver converta um bitmap opaco gerenciado pelo dispositivo em um que seja nonopaque, ele deve chamar a função EngModifySurface . Com essa chamada, o driver está informando a GDI sobre o formato de bitmap e o local do bitmap na memória.
Quando um driver tem uma superfície DIB gerenciada pelo dispositivo, o driver pode chamar de volta para a GDI para que o GDI seja desenhado na superfície. Um driver que está gerenciando suas próprias superfícies, mas está usando um DIB, ainda pode encaminhar chamadas de volta para GDI encapsulando um DIB (que é criado com a função EngCreateBitmap ) em torno de sua superfície. As etapas a seguir descrevem como o driver pode desenhar GDI em uma superfície DIB gerenciada pelo dispositivo:
O driver chama EngCreateBitmap para criar uma superfície gerenciada pelo mecanismo DIB.
O driver chama a função EngCreateDeviceBitmap para criar uma superfície de DDB (bitmap dependente do dispositivo), que é uma superfície DIB gerenciada pelo dispositivo.
O driver salva internamente os dados DIB gerenciados pelo mecanismo nos dados do DDB gerenciados pelo dispositivo.
A GDI sempre chama o driver para interagir com a superfície por meio dos dados do DDB gerenciados pelo dispositivo.
Quando o driver recebe uma chamada da GDI e não consegue lidar com a chamada (por exemplo, o driver não pode lidar com recortes complexos), o driver recupera os dados DIB armazenados nos dados do DDB e passa os dados DIB para a GDI para renderizar.
Superfícies gerenciadas pelo dispositivo (bitmaps não padrão)
Um driver pode habilitar uma superfície não DIB gerenciada pelo dispositivo chamando a função EngCreateDeviceSurface para que o GDI crie a superfície e retorne um identificador para ela. A GDI depende do driver para acessar, controlar o desenho e ler de uma superfície gerenciada pelo dispositivo.
Um DDB (bitmap dependente do dispositivo), que às vezes é chamado de bitmap de formato de dispositivo, é outro tipo de superfície não DIB, gerenciada pelo dispositivo. O DDB tem suporte para permitir que determinados drivers, como o driver VGA, implementem transferências de bloco bitmap para tela mais rápidas. O DDB também permite que os drivers sejam desenhados para bitmaps bancários ou não DIB na memória de exibição fora da tela. Se um DDB for necessário, o driver poderá dar suporte à função DrvCreateDeviceBitmap e chamar a função EngCreateDeviceBitmap para que o mecanismo retorne um identificador para o bitmap.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de