【IDL代码库】利用IDLDrawWidget实现C#与IDL混合编程
在博文 http://blog.sina.com.cn/s/blog_764b1e9d01018v35.html 中较为详细地介绍了IDL混合编程的基本手段和方法。本文以 IDLDrawWidget 为例,介绍如何进行C#与IDL之间的功能调用。
以IDLDrawWidget为例
与IDLDrawWidget功能类似的有COM_IDL_ConnectLib引用。区别是,前者具有图形显示的功能,而后者只能调用IDL功能函数等。
下面以IDLDrawWidget为例,介绍如何进行C#与IDL混合编程。
(1)打开Visual Studio,新建C# Windows应用程序。如图所示。
注:演示所用VS为2010版本,其他版本类似。
图:新建Windows窗体应用程序
(2)工具箱->常规,右键,点击“选择项”,在弹出的对话框中选择“COM组件”选项卡,找到IDLDrawWidget Control 3.0,勾选然后点击确定。
注:如果在列表中找不到此组件,可点击“浏览”,指定到“.\IDL82\bin\bin.x86”路径下的“idldrawx3.ocx”文件即可。
图:工具箱添加COM组件
(3)添加IDLDrawWidget控件到窗体中。添加完成后,引用中会自动添加如图所示的两个引用,可以实现C#调用IDL功能。
图:添加IDLDrawWidget组件
(4)在Form_Load中添加组件初始化代码,如下所示。
this.axIDLDrawWidget1.IdlPath = @"C:\Program Files\Exelis\IDL82\bin\bin.x86";
//初始化标志
int initFlag = this.axIDLDrawWidget1.InitIDL((int)this.Handle);
if (initFlag <= 0)
{
MessageBox.Show("IDL初始化失败,请检查!");
return;
};
//初始化窗体
this.axIDLDrawWidget1.CreateDrawWidget();
(5)在窗体中添加一个按钮,然后编写代码如下。
//文件打开
OpenFileDialog pOpenFile = new OpenFileDialog();
pOpenFile.Filter = "JPEG文件(*.jpg)|*.jpg|BMP文件(*.bmp)|*.bmp|PNG文件(*.png)|*.png|所有文件(*.*)|*.*";//设置打开文件类型
pOpenFile.Title = "打开图像文件";
//文件选择
if (pOpenFile.ShowDialog() == DialogResult.OK)
{
//读取数据
this.axIDLDrawWidget1.ExecuteStr("data = read_image('" + pOpenFile.FileName + "', /true)");
//设置当前显示窗体
this.axIDLDrawWidget1.ExecuteStr("widget_control, " + this.axIDLDrawWidget1.DrawId.ToString() + ", get_value=WinID");
this.axIDLDrawWidget1.ExecuteStr("wset, WinID");
//显示图像
this.axIDLDrawWidget1.ExecuteStr("tv, congrid(data, 3, 500, 350), /true");
}
(6)运行测试。点击按钮,选择图像文件,显示效果如下:
图:显示图像运行效果
(7)添加按钮“显示曲线”,编写如下代码,可以测试数据传递功能。
int[] arr = new int[7] {2,5,4,3,8,2,9};
this.axIDLDrawWidget1.SetNamedArray("arr", arr, true);
this.axIDLDrawWidget1.ExecuteStr("erase");
this.axIDLDrawWidget1.ExecuteStr("plot, arr");
(8)运行效果如下:
图:绘制曲线运行效果
源代码下载
IDLDrawWidget组件除了提供显示功能外,还提供了很多方法和事件控制接口,比如上文用到的SetNamedArray等。具体可查看博文:http://blog.sina.com.cn/s/blog_764b1e9d0100w06w.html
本文提供如下两个DEMO的源代码。(环境为VS2010和IDL8.0,用户可查看Backup文件夹内较老版本的项目文件)
下载链接:https://pan.baidu.com/s/1yZBJ2g-OmdETo5629Mpb4Q
提取码:envi
图:图像处理Demo