Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
[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 |
|