2012-03-29 2 views
2

У меня есть видеографика в C# с DirectShow.Показать только небольшую площадь видео с прямым шоу

Теперь я хочу показать все источники видео с его предварительным просмотром. Но он не должен настраивать область видео на размер панели.

В настоящее время он показывает мне видео на панели, но регулирует размер видео пропорционально панели.

Я хочу показать только одну область видео на этой панели. Например, это изображение: 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); 

панели типа Panel.

ответ

2

Решение заключается в использовании SetWindowPosition of IVideoWindow.

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

Спасибо, ты дал мне подсказку, с которой я нашел решение. –