2012-03-29 5 views
2

Ich habe ein Video-Diagramm in C# mit DirectShow.Zeige nur kleinen Bereich des Videos mit directshow

Jetzt möchte ich alle Videoquellen mit seiner Vorschau zeigen. Aber es sollte den Videobereich nicht an die Größe des Panels anpassen.

Derzeit zeigt es mir das Video auf dem Panel, aber es passt die Größe des Videos proportional in das Panel.

Ich möchte nur einen einzigen Bereich des Videos in diesem Panel zeigen. Zum Beispiel dieses Bild: http://www.cnet.de/i/story_media/41557373/weitwinkel.jpg Wäre dies mein Video und der kleinste Bereich wäre die Größe meines Panels. Ich möchte nicht das gesamte Video in meine Panelgröße einpassen, es sollte nur einen kleinen Teil des Videos zeigen.

Mein Code ist:

//get the video window from the graph 
IVideoWindow videoWindow2 = (IVideoWindow)_graph; 

//Set the owner of the videoWindow to an IntPtr of some sort (the Handle of any control - could be a form/button etc.) 
int hr = videoWindow2.put_Owner(panel.Handle); 

Panel vom Typ-Panel.

Antwort

2

Die Lösung besteht darin, SetWindowPosition von IVideoWindow zu verwenden.

//get the real video width 
hr1 = videoWindow2.get_Width(out videoWidth); 
DsError.ThrowExceptionForHR(hr1); 

//get the real video height 
hr1 = videoWindow2.get_Height(out videoHeight); 
DsError.ThrowExceptionForHR(hr1); 

//calculate the width when setting the height to the panel height 
videoWidthF = (float)videoWidth; 
videoHeightF = (float)videoHeight; 
panelWidthF = (float)panelWidth; 
panelHeightF = (float)panelHeight; 

// calculate the margins 
int margin = (int)(((panelHeightF/videoHeightF*videoWidthF) - panelWidthF)/2); 

// Position video window in client rect of main application window 
hr1 = videoWindow2.SetWindowPosition(-margin, 0, (int)(panelHeightF/videoHeightF * videoWidthF), panel.Height); 
1

Schauen Sie sich den fensterlosen Modus des VMR an. IVMRWindowlessControl9 :: SetVideoPosition ist, was Sie suchen. Eine schnelle Google-Suche würde Beispiele liefern.

+0

Danke, Sie gaben mir den Hinweis, mit dem ich die Lösung gefunden habe. –