Contextos do dispositivo de memória
Para permitir que os aplicativos coloquem a saída na memória em vez de enviá-la para um dispositivo real, use um contexto de dispositivo especial para operações de bitmap chamadas contexto de dispositivo de memória. Um DC de memória permite que o sistema trate uma parte da memória como um dispositivo virtual. É uma matriz de bits na memória que um aplicativo pode usar temporariamente para armazenar os dados de cor para bitmaps criados em uma superfície de desenho normal. Como o bitmap é compatível com o dispositivo, um DC de memória também às vezes é chamado de contexto de dispositivo compatível.
O DC de memória armazena imagens de bitmap para um dispositivo específico. Um aplicativo pode criar um DC de memória chamando a função CreateCompatibleDC.
O bitmap original em um DC de memória é simplesmente um espaço reservado. Suas dimensões são um pixel por um pixel. Antes que um aplicativo possa começar a desenhar, ele deve selecionar um bitmap com a largura e a altura apropriadas no DC chamando a função SelectObject. Para criar um bitmap das dimensões apropriadas, use a funçãoCreateBitmap, CreateBitmapIndirectou CreateCompatibleBitmap. Depois que o bitmap é selecionado no DC de memória, o sistema substitui a matriz de bit único por uma matriz grande o suficiente para armazenar informações de cor para o retângulo especificado de pixels.
Quando um aplicativo passa o identificador retornado por CreateCompatibleDC para uma das funções de desenho, a saída solicitada não aparece na superfície de desenho de um dispositivo. Em vez disso, o sistema armazena as informações de cor da linha, curva, texto ou região resultantes na matriz de bits. O aplicativo pode copiar a imagem armazenada na memória novamente em uma superfície de desenho chamando a função BitBlt, identificando o DC de memória como o contexto do dispositivo de origem e um DC de janela ou tela como o contexto do dispositivo de destino.
Ao exibir um DIB ou um DDB criado a partir de um DIB em um dispositivo de paleta, você pode melhorar a velocidade com que a imagem é desenhada organizando a paleta lógica para corresponder ao layout da paleta do sistema. Para fazer isso, chame GetDeviceCaps com o valor NUMRESERVED para obter o número de cores reservadas no sistema. Em seguida, chame GetSystemPaletteEntries e preencha as primeiras e últimas entradas NUMRESERVED/2 da paleta lógica com as cores do sistema correspondentes. Por exemplo, se NUMRESERVED for 20, você preencherá as 10 primeiras e últimas entradas da paleta lógica com as cores do sistema. Em seguida, preencha as cores restantes de 256-NUMRESERVED da paleta lógica (em nosso exemplo, as 236 cores restantes) com cores do DIB e defina o sinalizador PC_NOCOLLAPSE em cada uma dessas cores.
Para obter mais informações sobre cores e paletas, consulte Cores. Para obter mais informações sobre bitmaps e operações de bitmap, consulte Bitmaps.