Показать только небольшую область видео с DirectShow - PullRequest
2 голосов
/ 29 марта 2012

У меня есть видео график в 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 ]

2 голосов
/ 04 апреля 2012

Решение состоит в том, чтобы использовать SetWindowPosition для 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 голос
/ 29 марта 2012

Взгляните на использование безоконный режим VMR.IVMRWindowlessControl9 :: SetVideoPosition - это то, что вы ищете.Быстрый поиск в Google предоставит образцы.

...