【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