如何在使用MediaEncode捕获桌面时指定屏幕区域
答案:1 悬赏:40 手机版
解决时间 2021-02-18 04:32
- 提问者网友:风月客
- 2021-02-17 15:24
如何在使用MediaEncode捕获桌面时指定屏幕区域
最佳答案
- 五星知识达人网友:时间的尘埃
- 2021-02-17 15:30
由于C#中的MediaEncode的对象并没有提供设置捕获屏幕区域的方法, 因此需要通过Marshal.GetIUnknownForObject方法或许IUnKnown接口的指针, 再通过GetObjectForIUnknown方法转换城IPropertyBag的接口(需要自己定义).
代码如下:
//IPropertyBag 的接口定义
[Guid("55272A00-42CB-11CE-8135-00AA004BB851")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPropertyBag
{
void Read(String propName,out object ptrVar,int errorLog);
void Write(string propName,ref object ptrVar);
}
//获取IPropertyBag的对象实例
IntPtr ptrUnk = Marshal.GetIUnknownForObject(oSrcVideo);
if (ptrUnk != IntPtr.Zero)
{
IPropertyBag oSrcPropBag = (IPropertyBag) Marshal.GetObjectForIUnknown(ptrUnk);
if (oSrcPropBag != null)
{
Object objData = null;
//不使用窗口的捕获方式
objData = (Object) false;
oSrcPropBag.Write("CaptureWindow" , ref objData);
//设置捕获的区域
objData = m_rctSrcScreenRect.Left;
oSrcPropBag.Write("Left" , ref objData);
objData = m_rctSrcScreenRect.Top;
oSrcPropBag.Write("Top" , ref objData);
objData = m_rctSrcScreenRect.Right;
oSrcPropBag.Write("Right" , ref objData);
objData = m_rctSrcScreenRect.Bottom;
oSrcPropBag.Write("Bottom" , ref objData);
//不使用整个屏幕的捕获方式
objData = (Object) false;
oSrcPropBag.Write("Screen" , ref objData);
}
Marshal.Release(ptrUnk);
}
以上
代码如下:
//IPropertyBag 的接口定义
[Guid("55272A00-42CB-11CE-8135-00AA004BB851")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPropertyBag
{
void Read(String propName,out object ptrVar,int errorLog);
void Write(string propName,ref object ptrVar);
}
//获取IPropertyBag的对象实例
IntPtr ptrUnk = Marshal.GetIUnknownForObject(oSrcVideo);
if (ptrUnk != IntPtr.Zero)
{
IPropertyBag oSrcPropBag = (IPropertyBag) Marshal.GetObjectForIUnknown(ptrUnk);
if (oSrcPropBag != null)
{
Object objData = null;
//不使用窗口的捕获方式
objData = (Object) false;
oSrcPropBag.Write("CaptureWindow" , ref objData);
//设置捕获的区域
objData = m_rctSrcScreenRect.Left;
oSrcPropBag.Write("Left" , ref objData);
objData = m_rctSrcScreenRect.Top;
oSrcPropBag.Write("Top" , ref objData);
objData = m_rctSrcScreenRect.Right;
oSrcPropBag.Write("Right" , ref objData);
objData = m_rctSrcScreenRect.Bottom;
oSrcPropBag.Write("Bottom" , ref objData);
//不使用整个屏幕的捕获方式
objData = (Object) false;
oSrcPropBag.Write("Screen" , ref objData);
}
Marshal.Release(ptrUnk);
}
以上
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯