2010-02-16 15 views
6

Ich arbeite an einer Anwendung und ich habe ein Problem, für das ich einfach keine Lösung finden kann. Die Anwendung ist in VC++ geschrieben. Was ich tun muss, ist ein YUV-Video-Feed mit Text darüber anzuzeigen.Zeichnen von Video mit Text an der Spitze

Im Moment funktioniert es richtig, indem Sie den Text in der OnPaint-Methode mit GDI und das Video auf einem DirectDraw-Overlay zeichnen. Ich muss das Overlay loswerden, weil es zu vielen Problemen führt. Es funktioniert nicht auf einigen Grafikkarten, Vista, 7, etc.

Ich kann nicht einen Weg finden, die gleiche Sache in einer kompatiblen Weise abzuschließen. Ich kann das Video mit DirectDraw mit einem Back-Buffer zeichnen und es einfach in den primären Puffer kopieren. Das Problem hierbei ist, dass der Text, der in GDI gezeichnet wird, aufgrund der Anzahl der Wiederholungen des Videos blinkt. Ich würde wirklich gerne den Code behalten, um den Text intakt zu zeichnen, da es gut funktioniert.

Gibt es eine Möglichkeit, den Text direkt zu einem DirectDraw-Puffer oder Speicherpuffer oder etwas zu zeichnen und es dann in den Backbuffer zu blt? Sollte ich alle zusammen eine andere Methode betrachten? Die zwei wichtigen Betriebssysteme sind XP und 7. Wenn jemand irgendwelche Ideen hat, lass es mich wissen und ich werde sie ausprobieren. Vielen Dank.

+0

+1 für die Frage – gyurisc

Antwort

2

Versuchen Sie, in Directshow und die Ticker Probe auf microsoft.com suchen:

DirectShow Ticker sample

dieses Beispiel wird das Video Mixing Renderer verwendet Video und Text zu mischen. Es verwendet die Schnittstelle IVMRMixerBitmap9, um Text auf den unteren Teil des Videofensters zu mischen.

DirectShow dient zum Erstellen von Filterdiagrammen zur Wiedergabe von Audio- oder Video-Streams und zum Hinzufügen verschiedener Filter für verschiedene Effekte und Manipulationen von Video- und Audio-Samples.

1

Anstatt den Video Mixing Renderer von DirectShow zu verwenden, können Sie auch die Schnittstelle ISampleGrabber verwenden. Der Vorteil ist, dass es sich um einen Filter handelt, der auch mit anderen Renderern verwendet werden kann, zum Beispiel wenn das Video nicht auf dem Bildschirm angezeigt wird, sondern über das Netzwerk gestreamt oder in eine Datei gespeichert wird.

+1

Der Nachteil davon ist jedoch, dass Sie das Mischen selbst in Software machen, und hardwareunterstütztes Dekodieren oder Deinterlacing deaktivieren. Wenn Sie die vmr-Mixer-Bitmap-API verwenden, können Sie hardwaregestütztes Alpha-Blending verwenden. –

+0

+1 für ISampleGrabber, da ich es ausgiebig benutze, um Echtzeitvideo in .NET mit GDI + zu malen. sogar auf YUY2 Oberflächen :) –