带有背景的C#DirectShow.Net中心视频
本文关键字:视频 Net C#DirectShow 背景 | 更新日期: 2023-09-27 18:24:07
我使用DirectShow.NET在C#窗体的控件中显示视频。当窗体和控件变大/变小时,我需要有视频来填充控件(MainForm_ResizeMove的if分支处理此问题)。如果设置了属性,我还需要保持源视频的大小。MainForm_ResizeMove的else部分中的代码处理此问题。我遇到的问题是,当其他部分将我的视频放置在以控件为中心的正确位置时,背景是灰色的。由于我已将视频位置设置为视频的大小,因此不应用边框颜色(因为在这种情况下没有边框)。有人能建议最好的解决方案是什么吗?
private IVMRWindowlessControl9 windowlessCtrl = null;
...
private void MainForm_Paint(object sender, PaintEventArgs e)
{
if (windowlessCtrl != null)
{
IntPtr hdc = e.Graphics.GetHdc();
int hr = windowlessCtrl.SetBorderColor(0x00FFFFFF);
hr = windowlessCtrl.RepaintVideo(this.Handle, hdc);
e.Graphics.ReleaseHdc(hdc);
}
}
private void MainForm_ResizeMove(object sender, EventArgs e)
{
if (windowlessCtrl != null)
{
if (fillScreen || (this.ClientRectangle.Width < streamFrameWidth) || (this.ClientRectangle.Height < streamFrameHeight))
{
int hr = windowlessCtrl.SetVideoPosition(null, DsRect.FromRectangle(this.ClientRectangle));
}
else
{
Rectangle rect = new Rectangle((this.ClientRectangle.Width / 2) - (streamFrameWidth / 2),
(this.ClientRectangle.Height/ 2) - (streamFrameHeight / 2),
streamFrameWidth, streamFrameHeight);
int hr = windowlessCtrl.SetVideoPosition(null, rect);
}
}
}
实际上很简单,将控件的背景色设置为黑色!!