2 Stimmen

EVR: transparenter Textausgabe im Videofenster

Auf dem Formular das Schaltfläche, Trackbar, das Panel (Panel1 - der Nachfolger von TPanel + wird Canvas hinzugefügt, align=client), Ich starte das Video über EVR auf dem Panel (TPanel)

...
FGraph: IGraphBuilder;
FEVR: IBaseFilter;
FDisplayControl: IMFVideoDisplayControl;
...

OnBtnclik>>

if not Succeeded (CoCreateInstance (CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, FGraph)) then Exit;
if not Succeeded (CoCreateInstance (CLSID_EnhancedVideoRenderer, nil, CLSCTX_INPROC, IID_IBaseFilter, FEVR)) then Exit;
FGraph. AddFilter (FEVR, 'EVR');
(FEVR as IMFGetService).GetService (MR_VIDEO_RENDER_SERVICE, IID_IMFVideoDisplayControl, FDisplayControl);
FDisplayControl. SetVideoWindow (Panel1.Handle); 
UpdateEvr; // resize
FGraph. RenderFile (PWideChar ('c:\video\myvideo.avi'), nil);
FDisplayControl. SetAspectRatioMode (0);
...

OntrackbarChange>>
...
    with panel1.Canvas do
      begin
        Font. Color: = cllime;
        Brush. Style: = bsclear;
        Font. Size: = 20;
        TextOut (10, 10, ' TRANSPARENTER TEXT ');
      end; 

Der Text wird angezeigt, aber flackert. Wie kann man den normalen transparenten Text auf Panel1 während des Videoabspielens ausgeben?

CG.E.Rad 2010

0voto

David Heffernan Punkte 585606

Es scheint mir seltsam, dass du beim Ändern der Track Bar malst. Warum malst du nicht in einer überschriebenen Paint-Methode? Das würde es dir ermöglichen, Double-Buffering zu betreiben, falls alle anderen Versuche zur Reduzierung von Flackern fehlschlagen.

Abgesehen davon würde ich benutzerdefiniertes Malen wahrscheinlich vermeiden. Ich würde ein TLabel verwenden, um den Text anzuzeigen, und es wird im Rahmen des Malzyklus gemalt. Wenn du immer noch Probleme mit Flackern hast, könntest du feststellen, dass TStaticText weniger flackert als TLabel.

0voto

yms Punkte 10210

Ich denke, dass Ihr Problem durch die DirectShow-Engine verursacht wird, die das Video über Ihrem Label zeichnet. Sie "aktualisieren" Ihr Label, wenn Sie es im Track Bar-Ereignis zeichnen, aber die Aktualisierungsrate der Videowiedergabe wird niemals mit Ihren Track Bar-Ereignissen übereinstimmen, sodass das Flackern auftritt. Ich glaube, es gibt keine Möglichkeit, diesen Ansatz zum Funktionieren zu bringen. Ich empfehle, einen Blick in den Beispielcode "Text" und "Text9" auf dem Summer 2004 DirectX DSK Update zu werfen, wie in dem folgenden Beitrag angegeben: http://www.eggheadcafe.com/software/aspnet/32121970/placing-text-overlay-on-direct-show-video.aspx Diese Beispielscodes sind in C ++ geschrieben, aber es sollte nicht allzu schwierig sein, sie nach Delphi zu übersetzen.

0voto

Gu. Punkte 1917

http://www.delphibbs.com/keylife/iblog_show.asp?xid=33152

im Verfahren TEVR9Demo.VideoPlay;

erster Schritt - hinzufügen:

image1.canvas.Brush.Color:=clblack;
image1.Canvas.FloodFill(10,10,clblack,fsborder);
image1.Canvas.FloodFill(10,10,clblack,fsSurface);
image1.Canvas.Font.Color:=cllime;
image1.Canvas.Font.Size:=24;
image1.Canvas.Brush.Style := bsclear;
image1.Canvas.TextOut(10,10,'BEISPIEL FÜR TRANSPARENTEN TEXT');

e!!!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X