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.
Per usare questa classe, eseguire le operazioni seguenti:
- Quando i pin si connettono, chiamare i metodi CDrawImage::NotifyMediaType e CDrawImage::NotifyAllocator .
- Ogni volta che il tipo di supporto cambia, chiama di nuovo NotifyMediaType .
- Prima di eseguire il rendering, chiamare CDrawImage::SetDrawContext.
- Chiamare CDrawImage::SetSourceRect se il rettangolo di origine cambia e CDrawImage::SetTargetRect se il rettangolo di destinazione cambia.
- Gestire la tavolozza per le immagini pallizzate, come descritto nella sezione sulle tavolozze che seguono.
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 |
|
Libreria |
|