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.

representador de vídeo personalizado mediante cdrawimage

Para usar esta clase, haga lo siguiente:

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
Winutil.h (include Streams.h)
Biblioteca
Strmbase.lib (compilaciones comerciales);
Strmbasd.lib (compilaciones de depuración)