高手请帮忙!我使用C#和MediaEncode 9编写了一个屏幕捕获工具, 但是无法通过程序指定捕获的屏幕区域,
在SDK中提到是C++的代码可以使用IPropertyBag接口指定捕获的屏幕区域,请问在C#中该如何设置, 谢谢!部分代码如下:
oSrcGrp = nSrcGrps.Add("SG_1");
oSrcAudio = (IWMEncAudioSource)
oSrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
oSrcVideo =(IWMEncVideoSource2)
oSrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);oSrcAudio.SetInput("Device://Default_Audio_Device", String.Empty , String.Empty);
oSrcVideo.SetInput("ScreenCap://ScreenCapture1" , String.Empty , String.Empty);nProFiles = m_oWMEncoder.ProfileCollection;
Int32 dwLength = nProFiles.Count;
for(int i = 0 ; i < dwLength ; i++)
{
oCaptureProfile = nProFiles.Item(i);
if (oCaptureProfile.Name == "Screen Video/Audio High (CBR)")
{
break;
}
else
{
oCaptureProfile = null;
}
}
oSrcGrp.set_Profile(oCaptureProfile);//C++可以通过oSrcGrp的QueryInterface方法获取IPropertyBag接口设定屏幕区域,在C#中该如何设定??m_oWMEncoder.PrepareToEncode(true);
m_oWMEncoder.Start();dwRtn = 0;
在SDK中提到是C++的代码可以使用IPropertyBag接口指定捕获的屏幕区域,请问在C#中该如何设置, 谢谢!部分代码如下:
oSrcGrp = nSrcGrps.Add("SG_1");
oSrcAudio = (IWMEncAudioSource)
oSrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
oSrcVideo =(IWMEncVideoSource2)
oSrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);oSrcAudio.SetInput("Device://Default_Audio_Device", String.Empty , String.Empty);
oSrcVideo.SetInput("ScreenCap://ScreenCapture1" , String.Empty , String.Empty);nProFiles = m_oWMEncoder.ProfileCollection;
Int32 dwLength = nProFiles.Count;
for(int i = 0 ; i < dwLength ; i++)
{
oCaptureProfile = nProFiles.Item(i);
if (oCaptureProfile.Name == "Screen Video/Audio High (CBR)")
{
break;
}
else
{
oCaptureProfile = null;
}
}
oSrcGrp.set_Profile(oCaptureProfile);//C++可以通过oSrcGrp的QueryInterface方法获取IPropertyBag接口设定屏幕区域,在C#中该如何设定??m_oWMEncoder.PrepareToEncode(true);
m_oWMEncoder.Start();dwRtn = 0;
解决方案 »
- c# vs2008 相同变量怎么高亮显示?
- 在C#中用System.Net.Mail这个类发送邮件,收到的邮件中附件变成dat文件
- 更新 JScript IntelliSense 时出错: C:\Users\cai\Desktop\毕业设计\taobao\js\tshop-min.js
- 网页关闭时我怎么调用后台代码释放资源
- 请教一个程序设计的问题!应该很easy
- 请问一下.net开发的winform程序界面容易改成web的吗?
- 强烈控诉中国移动通信(请版主不要删,第一次发这种贴,实在不得已,过两天马上转非技术区)
- 请教高手,关于缓存(急,在线等候)
- 请问哪儿可以下载CrystalReport 9.2中文版
- 编译DLL时提示:未能找到源文件"\target:library",什么原因?
- 有没有比datagridview好的控件
- 怎样设置TreeView的最未一级使用同一个图标---------------------------------------在线等待-特急
[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);
}以上