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.

renderizador de vídeo personalizado usando cdrawimage

Para usar essa classe, faça o seguinte:

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
Winutil.h (inclua Streams.h)
Biblioteca
Strmbase.lib (builds de varejo);
Strmbasd.lib (builds de depuração)