CDrawImage-Klasse
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
Die CDrawImage
-Klasse ist eine Hilfsklasse, die die Zeichnung für einen Videorendererfilter verwaltet. Alle Zeichnungsvorgänge werden mit GDI ausgeführt. Diese Klasse bietet keine Unterstützung für das Rendern mit DirectDraw. Die CDrawImage
-Klasse erfordert, dass der besitzereigene Filter auch die CBaseWindow-Klasse verwendet, die das Videofenster verwaltet. Der CDrawImage
Konstruktor verwendet einen Zeiger auf das CBaseWindow-Objekt .
Das folgende Diagramm zeigt die bevorzugte Möglichkeit, diese Klasse in einem benutzerdefinierten Videorendererfilter zu verwenden.
Gehen Sie wie folgt vor, um diese Klasse zu verwenden:
- Wenn die Pins eine Verbindung herstellen, rufen Sie die Methoden CDrawImage::NotifyMediaType und CDrawImage::NotifyAllocator auf .
- Wenn sich der Medientyp ändert, rufen Sie NotifyMediaType erneut auf.
- Rufen Sie vor dem Rendern CDrawImage::SetDrawContext auf.
- Rufen Sie CDrawImage::SetSourceRect auf, wenn sich das Quellrechteck ändert, und CDrawImage::SetTargetRect , wenn sich das Zielrechteck ändert.
- Verwalten Sie die Palette für palettierte Bilder, wie im folgenden Abschnitt zu Paletten beschrieben.
Allocators
Der im vorherigen Diagramm gezeigte Filter verwendet die benutzerdefinierte Zuordnungsklasse CImageAllocator. Dieser Zuweisungsgeber erstellt DIBs im freigegebenen Arbeitsspeicher mithilfe der GDI CreateDIBSection-Funktion . Die vom Zuteilungsgeber erstellten Beispiele sind CImageSample-Objekte .
Wenn der Filter den Zuteilungsgeber für die Verbindung besitzt, sind die Medienbeispiele garantiert CImageSample-Objekte . In diesem Fall kann das CDrawImage-Objekt die Zeichnung mithilfe von BitBlt oder StretchBlt optimieren. Andernfalls müssen die langsameren Funktionen SetDIBitsToDevice oder StretchDIBits verwendet werden. Die schnellere Option wird von der CDrawImage::FastRender-Methode implementiert, die langsamere Option durch die CDrawImage::SlowRender-Methode . (Trotz des Namens werden Sie wahrscheinlich keinen großen Leistungstreffer in SlowRender sehen, insbesondere nicht auf neuerer Hardware.)
Paletten
Wenn die FastRender-Methode zum Zeichnen verwendet wird und das Bild palettisiert ist, muss der Filter die Palette wie folgt verwalten:
- Die CImageSample-Klasse enthält eine Palettenversionsnummer, die in der DIBDATA-Struktur gespeichert ist. Der Wert wird initialisiert, wenn der Zuweisungsgeber das Beispiel erstellt.
- Die CDrawImage-Klasse enthält auch eine Palettenversionsnummer, die bei der Erstellung initialisiert wird.
- Wenn sich der Medientyp in ein neues palettisiertes Format ändert, rufen Sie CDrawImage::IncrementPaletteVersion auf. Diese Methode erhöht die Palettenversionsnummer des CDrawImage-Objekts . Wenn der Filter die CImagePalette-Klasse verwendet, um die Paletteninformationen zu verwalten, können Sie einfach CImagePalette::P reparePalette aufrufen, wenn sich der Medientyp ändert. Die PreparePalette-Methode erhöht die Palettenversion nur bei Bedarf.
- Die FastRender-Methode vergleicht die CDrawImage-Palettenversion mit der Palettenversion des Beispiels. Wenn die Versionsnummer des Beispiels hinter der CDrawImage-Versionsnummer zurückbleibt, ruft die FastRender-MethodeCDrawImage::UpdateColourTable auf. Die UpdateColourTable-Methode legt die Farbtabelle im Gerätekontext mithilfe der GDI SetDIBColorTable-Funktion fest. Außerdem wird die Palettenversion des Beispiels auf die aktuelle Versionsnummer aktualisiert.
- Wenn der Pin wieder verbunden wird, sollte der Filter CDrawImage::ResetPaletteVersion aufrufen, um die Palettenversion zurückzusetzen. Beim Erneuten Herstellen der Pinverbindung weist der Zuteilungsgeber alle Beispiele neu zu.
Geschützte Membervariablen | BESCHREIBUNG |
---|---|
m_bStretch | Gibt an, ob das Videobild gestreckt werden muss, um dem Zielfenster zu entsprechen. |
m_bUsingImageAllocator | Gibt an, ob der Zuweisungsgeber für die Pinverbindung ein CImageAllocator-Objekt ist. |
m_EndSample | Gibt die Stoppzeit des letzten Beispiels an. |
m_hdc | Handle mit dem Gerätekontext des Besitzerfensters. |
m_MemoryDC | Handle mit dem Kontext des Speichergeräts des Besitzerfensters. |
m_PaletteVersion | Wird verwendet, um nachzuverfolgen, wann sich die Palette ändert. |
m_pBaseWindow | Zeiger auf das besitzende CBaseWindow-Objekt . |
m_pMediaType | Zeiger auf den aktuellen Medientyp. |
m_SourceRect | Gibt das Quellrechteck zum Zeichnen an. |
m_StartSample | Gibt die Startzeit des letzten Beispiels an. |
m_TargetRect | Gibt das Zielrechteck zum Zeichnen an. |
Geschützte Methoden | BESCHREIBUNG |
DisplaySampleTimes | Zeichnet die Zeitstempel eines Medienbeispiels auf dem Videobild. |
FastRender | Zeichnet das Videobild mit den Funktionen BitBlt oder StretchBlt . |
SetStretchMode | Berechnet, ob das Videobild gestreckt werden muss. |
SlowRender | Zeichnet das Videobild mit den Funktionen SetDIBitsToDevice oder StretchDIBits . |
UpdateColourTable | Updates die Farbtabelle mit einer neuen Palette. |
Öffentliche Methoden | BESCHREIBUNG |
CDrawImage | Konstruktormethode. |
Drawimage | Zeichnet einen Videorahmen im Videofenster. |
DrawVideoImageHere | Zeichnet ein Bild aus einem Medienbeispiel in einen angegebenen Gerätekontext. |
GetPaletteVersion | Ruft die Palettenversion ab. |
GetSourceRect | Ruft das aktuelle Quellrechteck ab. |
GetTargetRect | Ruft das aktuelle Zielrechteck ab. |
InkrementPaletteVersion | Erhöht die Palettenversion. |
NotifyAllocator | Informiert das CDrawImage -Objekt, ob es sich bei der Zuordnung für die Verbindung um ein CImageAllocator-Objekt handelt. |
NotifyEndDraw | Wird nicht unterstützt. |
NotifyMediaType | Benachrichtigt das -Objekt über den aktuellen Medientyp. |
NotifyStartDraw | Wird nicht unterstützt. |
ResetPaletteVersion | Setzt die Palettenversion zurück. |
ScaleSourceRect | Skaliert ein angegebenes Quellrechteck, wenn es einen Unterschied zwischen der nativen Videogröße und dem Medientypformat gibt. Virtuellen. |
SetDrawContext | Legt die Gerätekontexte fest, die zum Zeichnen verwendet werden. |
SetSourceRect | Legt das Quellrechteck fest. |
SetTargetRect | Legt das Zielrechteck fest. |
UsingImageAllocator | Gibt an, ob die aktuelle Zuweisung ein CImageAllocator-Objekt ist. |
Anforderungen
Anforderung | Wert |
---|---|
Header |
|
Bibliothek |
|