Classe CDrawImage

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

La CDrawImage classe è una classe helper che gestisce il disegno per un filtro del renderer video. Tutte le operazioni di disegno vengono eseguite tramite GDI. Questa classe non fornisce alcun supporto per il rendering con DirectDraw. La CDrawImage classe richiede che il filtro proprietario usi anche la classe CBaseWindow , che gestisce la finestra video. Il CDrawImage costruttore accetta un puntatore all'oggetto CBaseWindow .

Il diagramma seguente illustra il modo preferito per usare questa classe in un filtro del renderer video personalizzato.

renderer video personalizzato con cdrawimage

Per usare questa classe, eseguire le operazioni seguenti:

Allocatori

Il filtro illustrato nel diagramma precedente usa una classe allocatore personalizzata , CImageAllocator. Questo allocatore crea DIB in memoria condivisa usando la funzione GDI CreateDIBSection . Gli esempi creati dall'allocatore sono oggetti CImageSample .

Se il filtro è proprietario dell'allocatore per la connessione, è garantito che gli esempi multimediali siano oggetti CImageSample . In tal caso, l'oggetto CDrawImage può ottimizzare il disegno usando BitBlt o StretchBlt. In caso contrario, deve usare le funzioni SetDIBitsToDevice o StretchDIBits più lente. L'opzione più veloce viene implementata dal metodo CDrawImage::FastRender , l'opzione più lenta dal metodo CDrawImage::SlowRender . Nonostante il nome, probabilmente non si noterà un grande successo delle prestazioni in SlowRender, soprattutto nell'hardware più recente.

Tavolozze

Se il metodo FastRender viene usato per il disegno e l'immagine è pallido, il filtro deve gestire la tavolozza, come indicato di seguito:

  • La classe CImageSample contiene un numero di versione della tavolozza archiviato nella struttura DIBDATA . Il valore viene inizializzato quando l'allocatore crea l'esempio.
  • La classe CDrawImage contiene anche un numero di versione della tavolozza, inizializzato alla creazione.
  • Ogni volta che il tipo di supporto viene modificato in un nuovo formato pallido, chiamare CDrawImage::IncrementPaletteVersion. Questo metodo incrementa il numero di versione dell'oggetto CDrawImage . Se il filtro usa la classe CImagePalette per gestire le informazioni sulla tavolozza, è sufficiente chiamare CImagePalette::P reparePalette ogni volta che il tipo di supporto cambia. Il metodo PreparePalette incrementa la versione della tavolozza solo quando necessario.
  • Il metodo FastRender confronta la versione della tavolozza CDrawImage con la versione della tavolozza dell'esempio. Se il numero di versione dell'esempio si ritarda dietro il numero di versione CDrawImage , il metodo FastRender chiama CDrawImage::UpdateColourTable. Il metodo UpdateColourTable imposta la tabella dei colori nel contesto di dispositivo usando la funzione GDI SetDIBColorTable . Inoltre, la versione della tavolozza nell'esempio viene aggiornata al numero di versione corrente.
  • Se il pin si riconnette, il filtro deve chiamare CDrawImage::ResetPaletteVersion per reimpostare la versione della tavolozza. In caso di riconnessione del pin, l'allocatore riassegnare tutti i campioni.
Variabili membro protette Descrizione
m_bStretch Indica se l'immagine video deve essere estesa per adattarsi alla finestra di destinazione.
m_bUsingImageAllocator Indica se l'allocatore per la connessione pin è un oggetto CImageAllocator .
m_EndSample Specifica l'ora di arresto dell'esempio più recente.
m_hdc Gestire il contesto del dispositivo della finestra proprietaria.
m_MemoryDC Gestire il contesto del dispositivo di memoria della finestra proprietaria.
m_PaletteVersion Usato per tenere traccia delle modifiche apportate alla tavolozza.
m_pBaseWindow Puntatore all'oggetto CBaseWindow proprietario.
m_pMediaType Puntatore al tipo di supporto corrente.
m_SourceRect Specifica il rettangolo di origine per il disegno.
m_StartSample Specifica l'ora di inizio dell'esempio più recente.
m_TargetRect Specifica il rettangolo di destinazione per il disegno.
Metodi protetti Descrizione
DisplaySampleTimes Disegna i timestamp di un campione multimediale sopra l'immagine video.
FastRender Disegna l'immagine video usando le funzioni BitBlt o StretchBlt .
SetStretchMode Calcola se l'immagine video deve essere estesa.
SlowRender Disegna l'immagine video usando le funzioni SetDIBitsToDevice o StretchDIBits .
UpdateColourTable Aggiornamenti tabella dei colori con una nuova tavolozza.
Metodi pubblici Descrizione
CDrawImage Metodo del costruttore.
DrawImage Disegna un fotogramma video nella finestra del video.
DrawVideoImageHere Disegna un'immagine da un campione multimediale a un contesto di dispositivo specificato.
GetPaletteVersion Recupera la versione della tavolozza.
GetSourceRect Recupera il rettangolo di origine corrente.
GetTargetRect Recupera il rettangolo di destinazione corrente.
IncrementPaletteVersion Incrementa la versione della tavolozza.
NotifyAllocator Informa l'oggetto se l'allocatore CDrawImage per la connessione è un oggetto CImageAllocator .
NotifyEndDraw Non supportato.
NotifyMediaType Notifica all'oggetto del tipo di supporto corrente.
NotifyStartDraw Non supportato.
ResetPaletteVersion Reimposta la versione della tavolozza.
ScaleSourceRect Ridimensiona un rettangolo di origine specificato, se esiste una differenza tra le dimensioni del video nativo e il formato del tipo di supporto. Virtuale.
SetDrawContext Imposta i contesti del dispositivo usati per il disegno.
SetSourceRect Imposta il rettangolo di origine.
SetTargetRect Imposta il rettangolo di destinazione.
UsingImageAllocator Indica se l'allocatore corrente è un oggetto CImageAllocator .

Requisiti

Requisito Valore
Intestazione
Winutil.h (includere Streams.h)
Libreria
Strmbase.lib (build al dettaglio);
Strmbasd.lib (build di debug)