永发信息网

如何在使用MediaEncode捕获桌面时指定屏幕区域

答案:1  悬赏:40  手机版
解决时间 2021-02-18 04:32
如何在使用MediaEncode捕获桌面时指定屏幕区域
最佳答案
由于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);
}

以上
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
熊黛林身高多少 嫁入豪门的她婚后生活很幸福
死飞自行车普通车架和贵的有什么区别
中国广西柳州申通快递河西营业厅的准确位置
李同学将番茄的幼苗移栽后,开始几天出现了萎
容声bcd一202m tc冰箱外壁时冷时热
灌南县医药有限公司这个地址在什么地方,我要
手机屏幕坏了,电话短信都存手机里了现在看不
海南省足球特长生高考考体育要二级运动员证吗
我们怎样让投资商愿意出资加入我们的合作?
4分之1乘2乘3分之2加2分之1等于几 要一步一步
如何评价白岩松的《白说》
11011011的十进制
I am Bob Brown.(改为一般疑问句)
浮梁县公路运输管理所服务大厅怎么去啊,有知
背景资料:某公路工程在施工招标前编制工程预
推荐资讯
邯郸到柳州多少公里
刘谦为什么不出现了
origin 怎么把直方图填充条纹
什么是白头(皮肤上的)?怎样去白头?
我国农历采用天干地支纪年法,天干是:甲、乙
五笔中为什么天是杂合型的,而午是上下型的?
中国移动99元购机n23g
生产超纯水的精处理抛光树脂更换周期和更换标
河南省广播电视局地址在哪,我要去那里办事
has down this by
求一份:大学生就业状况调查报告(2000字左右
右下图表示某高等植物卵细胞的染色体数目和形
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?