Freigeben über


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.

Benutzerdefinierter Videorenderer mit cdrawimage

Gehen Sie wie folgt vor, um diese Klasse zu verwenden:

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
Winutil.h (Streams.h einschließen)
Bibliothek
Strmbase.lib (Einzelhandelsbuilds);
Strmbasd.lib (Debugbuilds)