我在带有DirectShow的c#中有一个视频图。
现在我想用预览显示所有视频源。但它不应该将视频区域调整到面板的大小。
目前它向我展示了面板上的视频,但它会调整视频的大小与面板成比例。
我想在此面板中仅显示视频的单个区域。例如,这张图片: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。
答案 0 :(得分: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 :(得分:1)
看一下使用VMR的无窗口模式。 IVMRWindowlessControl9 :: SetVideoPosition正是您所寻找的。快速谷歌搜索将提供样本。