【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

 图:C#与IDL混合编程

posted @ 2022-05-27 12:46  ENVI-IDL技术殿堂  阅读(393)  评论(0编辑  收藏  举报