2012-03-29 13 views
2

私はDirectShowでc#でビデオグラフを持っています。DirectShowでビデオの小さな部分のみを表示

ここでは、すべてのビデオソースをプレビューして表示します。しかし、ビデオ領域をパネルのサイズに合わせるべきではありません。

現在のところ、ビデオはパネルに表示されますが、パネルに比例してビデオのサイズが調整されます。

このパネルでは、ビデオの1つの領域のみを表示します。たとえば、この画像の場合:http://www.cnet.de/i/story_media/41557373/weitwinkel.jpg これは私のビデオで、その上の最小の領域は私のパネルのサイズになります。私は自分のパネルサイズにビデオ全体を収めたくないので、ビデオのほんの一部しか表示しないでください。

私のコードは次のとおりです。

//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); 

パネルは型パネルのです。

答えて

2

解決策は、IVideoWindowのSetWindowPositionを使用することです。

//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

VMRのウィンドウレスモードの使用を見てください。 IVMRWindowlessControl9 :: SetVideoPositionはあなたが探しているものです。簡単なgoogle検索ではサンプルが提供されます。

+0

ありがとうございます、ありがとう、私は解決策を見つけたヒントをくれました。 –

関連する問題