CDrawImage (clase)
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
La CDrawImage
clase es una clase auxiliar que administra el dibujo de un filtro de representador de vídeo. Todas las operaciones de dibujo se realizan mediante GDI. Esta clase no proporciona compatibilidad con la representación con DirectDraw. La CDrawImage
clase requiere que el filtro propietario también use la clase CBaseWindow , que administra la ventana de vídeo. El CDrawImage
constructor toma un puntero al objeto CBaseWindow .
En el diagrama siguiente se muestra la manera preferida de usar esta clase en un filtro de representador de vídeo personalizado.
Para usar esta clase, haga lo siguiente:
- Cuando se conecten los pines, llame a los métodos CDrawImage::NotifyMediaType y CDrawImage::NotifyAllocator .
- Siempre que cambie el tipo de medio, vuelva a llamar a NotifyMediaType .
- Antes de que se produzca cualquier representación, llame a CDrawImage::SetDrawContext.
- Llame a CDrawImage::SetSourceRect si cambia el rectángulo de origen y CDrawImage::SetTargetRect si cambia el rectángulo de destino.
- Administre la paleta de imágenes paletizadas, tal y como se describe en la sección de paletas que se indica a continuación.
Asignadores
El filtro que se muestra en el diagrama anterior usa una clase de asignador personalizado, CImageAllocator. Este asignador crea DIB en memoria compartida mediante la función CreateDIBSection de GDI. Los ejemplos creados por el asignador son objetos CImageSample .
Si el filtro posee el asignador para la conexión, se garantiza que los ejemplos multimedia sean objetos CImageSample . En ese caso, el objeto CDrawImage puede optimizar el dibujo mediante BitBlt o StretchBlt. De lo contrario, debe usar las funciones SetDIBitsToDevice o StretchDIBits más lentas . La opción más rápida se implementa mediante el método CDrawImage::FastRender , la opción más lenta por el método CDrawImage::SlowRender . (A pesar del nombre, probablemente no verá un gran impacto en el rendimiento en SlowRender, especialmente en hardware más reciente).
Paletas
Si el método FastRender se usa para dibujar y la imagen se paletiza, el filtro debe administrar la paleta, como se indica a continuación:
- La clase CImageSample contiene un número de versión de paleta, almacenado en la estructura DIBDATA . El valor se inicializa cuando el asignador crea el ejemplo.
- La clase CDrawImage también contiene un número de versión de paleta, que se inicializa al crearse.
- Siempre que el tipo de medio cambie a un nuevo formato palettized, llame a CDrawImage::IncrementPaletteVersion. Este método incrementa el número de versión de la paleta del objeto CDrawImage . Si el filtro usa la clase CImagePalette para administrar la información de la paleta, simplemente puede llamar a CImagePalette::P reparePalette siempre que cambie el tipo de medio. El método PreparePalette incrementa la versión de la paleta solo cuando es necesario.
- El método FastRender compara la versión de la paleta de CDrawImage con la versión de la paleta del ejemplo. Si el número de versión del ejemplo se retrasa detrás del número de versión de CDrawImage , el método FastRender llama a CDrawImage::UpdateColourTable. El método UpdateColourTable establece la tabla de colores en el contexto del dispositivo mediante la función SetDIBColorTable de GDI. Además, la versión de la paleta del ejemplo se actualiza al número de versión actual.
- Si el pin se vuelve a conectar, el filtro debe llamar a CDrawImage::ResetPaletteVersion para restablecer la versión de la paleta. En la reconexión de patillas, el asignador vuelve a asignar todos los ejemplos.
Variables miembro protegidas | Descripción |
---|---|
m_bStretch | Indica si la imagen de vídeo debe ajustarse para ajustarse a la ventana de destino. |
m_bUsingImageAllocator | Indica si el asignador para la conexión de patillas es un objeto CImageAllocator . |
m_EndSample | Especifica la hora de detención del ejemplo más reciente. |
m_hdc | Controle el contexto del dispositivo de la ventana propietaria. |
m_MemoryDC | Controle el contexto del dispositivo de memoria de la ventana propietaria. |
m_PaletteVersion | Se usa para realizar un seguimiento cuando cambia la paleta. |
m_pBaseWindow | Puntero al objeto CBaseWindow propietario. |
m_pMediaType | Puntero al tipo de medio actual. |
m_SourceRect | Especifica el rectángulo de origen para dibujar. |
m_StartSample | Especifica la hora de inicio del ejemplo más reciente. |
m_TargetRect | Especifica el rectángulo de destino para dibujar. |
Métodos protegidos | Descripción |
DisplaySampleTimes | Dibuja las marcas de tiempo de un ejemplo multimedia sobre la imagen de vídeo. |
FastRender | Dibuja la imagen de vídeo mediante las funciones BitBlt o StretchBlt . |
SetStretchMode | Calcula si se debe estirar la imagen de vídeo. |
SlowRender | Dibuja la imagen de vídeo mediante las funciones SetDIBitsToDevice o StretchDIBits . |
UpdateColourTable | Novedades la tabla de colores con una nueva paleta. |
Métodos públicos | Descripción |
CDrawImage | Método constructor. |
Drawimage | Dibuja un fotograma de vídeo en la ventana de vídeo. |
DrawVideoImageHere | Dibuja una imagen de un ejemplo multimedia en un contexto de dispositivo especificado. |
GetPaletteVersion | Recupera la versión de la paleta. |
GetSourceRect | Recupera el rectángulo de origen actual. |
GetTargetRect | Recupera el rectángulo de destino actual. |
IncrementPaletteVersion | Incrementa la versión de la paleta. |
NotifyAllocator | Informa al CDrawImage objeto de si el asignador de la conexión es un objeto CImageAllocator . |
NotifyEndDraw | No compatible. |
NotifyMediaType | Notifica al objeto del tipo de medio actual. |
NotifyStartDraw | No compatible. |
ResetPaletteVersion | Restablece la versión de la paleta. |
ScaleSourceRect | Escala un rectángulo de origen especificado, si hay una diferencia entre el tamaño de vídeo nativo y el formato de tipo multimedia. Virtual. |
SetDrawContext | Establece los contextos de dispositivo usados para dibujar. |
SetSourceRect | Establece el rectángulo de origen. |
SetTargetRect | Establece el rectángulo de destino. |
UsingImageAllocator | Indica si el asignador actual es un objeto CImageAllocator . |
Requisitos
Requisito | Value |
---|---|
Encabezado |
|
Biblioteca |
|