Classe CDrawImage
[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
A CDrawImage
classe é uma classe auxiliar que gerencia o desenho de um filtro de renderizador de vídeo. Todas as operações de desenho são executadas usando GDI. Essa classe não fornece suporte para renderização com DirectDraw. A CDrawImage
classe requer que o filtro proprietário também use a classe CBaseWindow , que gerencia a janela de vídeo. O CDrawImage
construtor usa um ponteiro para o objeto CBaseWindow .
O diagrama a seguir mostra a maneira preferida de usar essa classe em um filtro de renderizador de vídeo personalizado.
Para usar essa classe, faça o seguinte:
- Quando os pinos se conectarem, chame os métodos CDrawImage::NotifyMediaType e CDrawImage::NotifyAllocator .
- Sempre que o tipo de mídia for alterado, chame NotifyMediaType novamente.
- Antes de qualquer renderização ocorrer, chame CDrawImage::SetDrawContext.
- Chame CDrawImage::SetSourceRect se o retângulo de origem for alterado e CDrawImage::SetTargetRect se o retângulo de destino for alterado.
- Gerencie a paleta para imagens palettizadas, conforme descrito na seção em paletas a seguir.
Alocadores
O filtro mostrado no diagrama anterior usa uma classe de alocador personalizada, CImageAllocator. Esse alocador cria DIBs na memória compartilhada, usando a função GDI CreateDIBSection . Os exemplos criados pelo alocador são objetos CImageSample .
Se o filtro possuir o alocador para a conexão, os exemplos de mídia terão a garantia de serem objetos CImageSample . Nesse caso, o objeto CDrawImage pode otimizar o desenho usando BitBlt ou StretchBlt. Caso contrário, ele deverá usar as funções SetDIBitsToDevice ou StretchDIBits mais lentas. A opção mais rápida é implementada pelo método CDrawImage::FastRender , a opção mais lenta pelo método CDrawImage::SlowRender . (Apesar do nome, você provavelmente não verá um grande impacto no desempenho no SlowRender, especialmente em hardware mais recente.)
Paletas
Se o método FastRender for usado para desenhar e a imagem for palettizada, o filtro precisará gerenciar a paleta, da seguinte maneira:
- A classe CImageSample contém um número de versão de paleta, armazenado na estrutura DIBDATA . O valor é inicializado quando o alocador cria o exemplo.
- A classe CDrawImage também contém um número de versão de paleta, que é inicializado na criação.
- Sempre que o tipo de mídia for alterado para um novo formato palettizado, chame CDrawImage::IncrementPaletteVersion. Esse método incrementa o número de versão da paleta do objeto CDrawImage . Se o filtro usar a classe CImagePalette para gerenciar as informações da paleta, você poderá simplesmente chamar CImagePalette::P reparePalette sempre que o tipo de mídia for alterado. O método PreparePalette incrementa a versão da paleta somente quando necessário.
- O método FastRender compara a versão da paleta CDrawImage com a versão da paleta do exemplo. Se o número de versão do exemplo ficar atrás do número de versão CDrawImage , o método FastRenderchamará CDrawImage::UpdateColorrTable. O método UpdateColorrTable define a tabela de cores no contexto do dispositivo, usando a função GDI SetDIBColorTable . Além disso, a versão da paleta no exemplo é atualizada para o número de versão atual.
- Se o pino se reconectar, o filtro deverá chamar CDrawImage::ResetPaletteVersion para redefinir a versão da paleta. Na reconexão de pino, o alocador aloca novamente todos os exemplos.
Variáveis de membro protegidas | Descrição |
---|---|
m_bStretch | Indica se a imagem de vídeo deve ser estendida para caber na janela de destino. |
m_bUsingImageAllocator | Indica se o alocador para a conexão de pino é um objeto CImageAllocator . |
m_EndSample | Especifica o tempo de parada do exemplo mais recente. |
M_hdc | Manipule para o contexto do dispositivo da janela proprietária. |
m_MemoryDC | Manipule para o contexto do dispositivo de memória da janela proprietária. |
m_PaletteVersion | Usado para acompanhar quando a paleta é alterada. |
m_pBaseWindow | Ponteiro para o objeto CBaseWindow proprietário. |
m_pMediaType | Ponteiro para o tipo de mídia atual. |
m_SourceRect | Especifica o retângulo de origem para desenho. |
m_StartSample | Especifica a hora de início do exemplo mais recente. |
m_TargetRect | Especifica o retângulo de destino para desenho. |
Métodos Protegidos | Descrição |
DisplaySampleTimes | Desenha os carimbos de data/hora de um exemplo de mídia sobre a imagem de vídeo. |
FastRender | Desenha a imagem de vídeo usando as funções BitBlt ou StretchBlt . |
SetStretchMode | Calcula se a imagem de vídeo deve ser ampliada. |
SlowRender | Desenha a imagem de vídeo usando as funções SetDIBitsToDevice ou StretchDIBits . |
UpdateColorrTable | Atualizações a tabela de cores com uma nova paleta. |
Métodos públicos | Descrição |
CDrawImage | Método de construtor. |
Drawimage | Desenha um quadro de vídeo na janela de vídeo. |
DrawVideoImageHere | Desenha uma imagem de um exemplo de mídia para um contexto de dispositivo especificado. |
GetPaletteVersion | Recupera a versão da paleta. |
GetSourceRect | Recupera o retângulo de origem atual. |
GetTargetRect | Recupera o retângulo de destino atual. |
IncrementPaletteVersion | Incrementa a versão da paleta. |
NotifyAllocator | Informa ao CDrawImage objeto se o alocador da conexão é um objeto CImageAllocator . |
NotifyEndDraw | Não há suporte. |
NotifyMediaType | Notifica o objeto do tipo de mídia atual. |
NotifyStartDraw | Não há suporte. |
ResetPaletteVersion | Redefine a versão da paleta. |
ScaleSourceRect | Dimensiona um retângulo de origem especificado, se houver uma diferença entre o tamanho do vídeo nativo e o formato de tipo de mídia. Virtual. |
SetDrawContext | Define os contextos do dispositivo usados para desenho. |
SetSourceRect | Define o retângulo de origem. |
SetTargetRect | Define o retângulo de destino. |
UsingImageAllocator | Indica se o alocador atual é um objeto CImageAllocator . |
Requisitos
Requisito | Valor |
---|---|
parâmetro |
|
Biblioteca |
|