999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于COM的Matlab參數處理與圖像嵌入在VC中的實現*

2011-07-28 01:32:26柳炳利魏友華
網絡安全與數據管理 2011年24期
關鍵詞:方法

王 維,劉 斌,柳炳利,魏友華

(成都理工大學 數學地質四川省重點實驗室,四川 成都 610059)

基于COM組件的Matlab與C++混合編程方式因擁有獨立的運行環境和兩種語言的互補優勢而被眾多科研人員和編程人員所接受,同時也是MathWorks公司推薦使用的混編方式。但在程序設計過程中,通常會遇到兩個難點問題:(1)二維數組參數的傳遞與輸出;(2)Matlab生成圖形嵌入VC工程界面中。對于第一個問題,Bruce McKinney[1]在 MSDN上指出;“如果對一維數組進行操作,則SAFEARRAY函數變的簡單且易操作。但是對于多維數組,同樣的操作要復雜得多”,造成這一問題的根源在于Matlab與C++對多維數組元素的存儲方式不同。而在本項目開發過程中回避了這個復雜的過程,轉而利用Matlab強大的數組處理功能將其解決。Matlab完善的圖形處理功能是其被科研人員所推崇的原因之一,但因其圖形擁有獨立的窗口,嚴重影響了整體界面美觀和用戶交互體驗,所以Matlab圖形嵌入是混合編程中不可回避的問題。對此將通過實例介紹兩種圖形嵌入方法并分析說明其優缺點和相關細節。

本文示例均在Matlab R2008a和VC 6.0平臺下完成,且通過調試能夠正常運行。

1 Excel文件讀取方法

VC平臺下的Excel文件讀取方式復雜難懂,但如果使用Matlab與VC的混合編程方式編寫將更加簡便,而且擁有較強的可擴展性。下面代碼詳細講解了該過程。

(1)在Matlab平臺下建立CExcelRead.m文件,代碼如下:

保存文件后,使用deploytool工具將其制作成名為FileOpen的COM(封裝 MCR),注冊該控件并將相應的文件拷貝到MFC的工程中,對于基礎操作此處不再贅述。

(2)在VC平臺下創建名為PCA的基于對話框的MFC工程,添加一打開文件的按鈕控件,ID為ID_FILE_OPEN。篇幅所限只給出部分核心代碼,首先在Dlg類中添加3個私有成員變量用以保存Matlab讀取的數據及行列值,即:

}上述C++代碼中省略了異常處理和相關的內存、COM釋放代碼,由于代碼比較簡單所以不做進一步解析。請注意,下面將省略COM初始化及實例化等相同代碼。

(3)需要重點說明的是該方法的擴展性。通常Excel文件中保存多個工作區,有時用戶可能需要打開同一Excel文件中不同工作區中的數據,常規方法實現過于復雜,但對于本文介紹的方法可以通過修改添加幾條語句即可實現。首先,新建一個m文件用來處理工作區的選擇,代碼如下:

由于返回值是一個cell數組,所以VC平臺要使用CStringArray數據結構保存返回值,并顯示各工作區名稱供用戶選擇。然后,通過人機交互將用戶選擇的工作區參數保存并傳遞至CExcelRead.m,通過在CExcelRead.m增加一個工作區選擇參數,并對代碼稍作修改即可。

2 二維數組參數的傳遞與輸出[2]

下面以主成分分析為例介紹基于COM的Matlab與VC混合編程中二維數組參數處理。

(1)主成分分析pcamat.m代碼如下:

綜上,二維數組參數處理就是使用reshape()函數對輸入輸出數據維數進行變換來完成操作。

3 Matlab圖像嵌入VC界面[3]

3.1 基于CWnd類的圖像嵌入

在Windows操作系統下,所有應用程序的窗口都是基于MFC中的CWnd類。所以可以通過調用該類或其派生類中的方法實現圖像嵌入。基本思想:在Matlab平臺下用COM封裝產生圖形窗口的程序;在VC平臺獲取Figure窗口的句柄,將Figure窗口設為VC程序的子窗口;(3)將Figure窗口移動到指定顯示位置。

程序實現如下:

(1)將原pcamat.m進行修改,添加生成圖像的相關代碼

(2)封裝打包成名為figure的 COM組件,并完成注冊等相關操作。因為修改后的m文件運行結果包含輸出結果和圖像兩部分,所以下面有關圖像處理的代碼依然在PCATest控件的響應函數中。

運行結果如圖1所示。該方法的缺點是,在圖像生成時會有閃爍現象。而優點是前面提到的可以繼續使用Matlab提供的工具欄。鑒于該缺點影響整體美觀,所以引入下面第二種方法。

3.2 基于Bitmap類的圖像嵌入

通過Bitmap類將Matlab生成的.bmp文件加載到VC工程中,使用Bitmap類中的成員函數對圖像進行處理。由于相關函數可以通過幫助手冊獲取,所以此處不再給出相應代碼,運行結果如圖2所示。該方法避免了方法一生成圖像時的閃爍現象,但是BMP圖像顯示效果較差而且無法使用Matlab提供的工具菜單,這是其不足之處。

使用COM組件進行混合編程時,往往習慣于在VC平臺下思考所遇到的問題,但是這樣不僅使得問題可能變得復雜化,或得不到妥善解決,而且也違背了“混合”的初衷。二維數組參數處理就是一個很好的例證。其次,充分利用Matlab特性可以使得程序具備良好的擴展性和穩定性,對Excel文件讀取方式進行的擴展,明顯使軟件更加人性化。對于圖像嵌入問題,雖然文中提出的兩種嵌入方式可以滿足基本需求,但是仍然存在一些瑕疵,還需要進一步研究。

[1]MCKINNEY B.Article 5.The Safe OLE Way of Handling Arrays.MSDN,2001.

[2]劉維.精通 Matlab與 C++混合程序設計(第 2版)[M].北京:北京航空航天大學出版社,2008.

[3]董維國.深入淺出Matlab 7.X混合編程[M].北京:機械工業出版社,2006.

猜你喜歡
方法
中醫特有的急救方法
中老年保健(2021年9期)2021-08-24 03:52:04
高中數學教學改革的方法
河北畫報(2021年2期)2021-05-25 02:07:46
化學反應多變幻 “虛擬”方法幫大忙
變快的方法
兒童繪本(2020年5期)2020-04-07 17:46:30
學習方法
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
最有效的簡單方法
山東青年(2016年1期)2016-02-28 14:25:23
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
主站蜘蛛池模板: 日韩人妻精品一区| 免费在线看黄网址| 亚洲成aⅴ人在线观看| 国产欧美在线观看视频| 四虎亚洲国产成人久久精品| 国产欧美日韩91| 久久久久人妻一区精品| 亚洲人成网站在线播放2019| 国产综合在线观看视频| 永久免费精品视频| 欧美色图第一页| 国产一级在线播放| 国产一区二区网站| 久久天天躁狠狠躁夜夜2020一| 亚洲无码电影| 91蝌蚪视频在线观看| 又黄又湿又爽的视频| 欧美69视频在线| 国产精品999在线| 亚洲福利网址| 好紧太爽了视频免费无码| 日韩AV手机在线观看蜜芽| 四虎精品黑人视频| 欧美精品成人| 欧美福利在线| 日韩毛片免费| 欧美一级专区免费大片| 美女免费精品高清毛片在线视| 中文字幕亚洲乱码熟女1区2区| 91www在线观看| 国产无遮挡猛进猛出免费软件| 不卡视频国产| 国产日韩欧美在线播放| 国产精品一区在线观看你懂的| 日韩第九页| 国产精品精品视频| 国产无码精品在线| 欧美 亚洲 日韩 国产| 色视频久久| 国产夜色视频| 亚洲成人网在线观看| 精品国产成人a在线观看| 欧洲熟妇精品视频| 亚洲国产欧美国产综合久久| 日韩不卡免费视频| 日韩无码一二三区| 国产美女人喷水在线观看| 美女无遮挡被啪啪到高潮免费| 在线五月婷婷| 国产裸舞福利在线视频合集| 国产美女丝袜高潮| 色精品视频| 欧美亚洲国产一区| 毛片视频网址| 国产天天色| 久久精品国产999大香线焦| 99re热精品视频国产免费| YW尤物AV无码国产在线观看| 国产全黄a一级毛片| 欧美a级完整在线观看| 欧美在线视频不卡第一页| 国产女人在线| 国产99视频在线| 日韩欧美色综合| 欧美一区二区啪啪| 国产欧美另类| 狠狠色丁香婷婷| 亚洲福利一区二区三区| 国产网站一区二区三区| 综合久久五月天| 国产欧美另类| 亚洲精品第一在线观看视频| 国产在线自揄拍揄视频网站| 色哟哟国产精品| 国产一级视频久久| 国产精品久久久久久搜索| 亚洲中文字幕日产无码2021| 伊人色综合久久天天| 国产精选自拍| 9cao视频精品| 久久午夜夜伦鲁鲁片无码免费| 中文字幕66页|