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 chamada de 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, às vezes, um DC de memória também é conhecido como um 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ção CreateBitmap, CreateBitmapIndirect ou 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 para a linha, curva, texto ou região resultantes na matriz de bits. O aplicativo pode copiar a imagem armazenada na memória de volta para 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 com base em 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á a primeira e as últimas 10 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.