1. 程式人生 > 其它 >【IDL程式碼庫】利用IDLDrawWidget實現C#與IDL混合程式設計

【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混合程式設計