<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于COM的Matlab參數(shù)處理與圖像嵌入在VC中的實現(xiàn)

          基于COM的Matlab參數(shù)處理與圖像嵌入在VC中的實現(xiàn)

          作者: 時間:2012-03-16 來源:網(wǎng)絡(luò) 收藏

          組件的與C++混合編程方式因擁有獨立的運行環(huán)境和兩種語言的互補優(yōu)勢而被眾多科研人員和編程人員所接受,同時也是MathWorks公司推薦使用的混編方式。但在程序設(shè)計過程中,通常會遇到兩個難點問題:(1)二維數(shù)組的傳遞與輸出; (2)生成圖形工程界面中。對于第一個問題,Bruce McKinney[1]在MSDN上指出;“如果對一維數(shù)組進行操作,則SAFEARRAY函數(shù)變的簡單且易操作。但是對于多維數(shù)組,同樣的操作要復(fù)雜得多”,造成這一問題的根源在于與C++對多維數(shù)組元素的存儲方式不同。而在本項目開發(fā)過程中回避了這個復(fù)雜的過程,轉(zhuǎn)而利用Matlab強大的數(shù)組功能將其解決。Matlab完善的圖形功能是其被科研人員所推崇的原因之一,但因其圖形擁有獨立的窗口,嚴(yán)重影響了整體界面美觀和用戶交互體驗,所以Matlab圖形是混合編程中不可回避的問題。對此將通過實例介紹兩種圖形方法并分析說明其優(yōu)缺點和相關(guān)細(xì)節(jié)。
          本文示例均在Matlab R2008a和 6.0平臺下完成,且通過調(diào)試能夠正常運行。
          1 Excel文件讀取方法
          平臺下的Excel文件讀取方式復(fù)雜難懂,但如果使用Matlab與VC的混合編程方式編寫將更加簡便,而且擁有較強的可擴展性。下面代碼詳細(xì)講解了該過程。
          (1)在Matlab平臺下建立CExcelRead.m文件,代碼如下:
          function [output,row,col] = CExcelRead(filePath)
          //filePath包含了指定文件的路徑和文件名,由VC平臺函數(shù)GetPathName()獲取
          [typ, desc] = xlsfinfo(filePath);
          //xlsfinfo()可獲取指定Excel文件中各個sheet工作區(qū)的名稱,返回值存入名為desc的cell數(shù)組中
          sheet1 = cell2mat(desc(1));
          //默認(rèn)打開”sheet1”(名稱任意),并將其轉(zhuǎn)換為字符串
          output = xlsread(filePath,sheet1);
          //返回該Excel文件中的數(shù)據(jù),返回值存入output數(shù)組中
          [row,col] = size(output);
          //獲取錄入數(shù)據(jù)的行列值,返回到VC平臺以供其拷貝指定內(nèi)存大小的數(shù)據(jù)
          output = reshape(output,row*col,1);
          //將該二維數(shù)組轉(zhuǎn)換為一維。這是第二部分二維數(shù)組的第一步
          保存文件后,使用deploytool工具將其制作成名為FileOpen的(封裝MCR),注冊該控件并將相應(yīng)的文件拷貝到MFC的工程中,對于基礎(chǔ)操作此處不再贅述。
          (2)在VC平臺下創(chuàng)建名為PCA的對話框的MFC工程,添加一打開文件的按鈕控件,ID為ID_FILE_OPEN。篇幅所限只給出部分核心代碼,首先在Dlg類中添加3個私有成員變量用以保存Matlab讀取的數(shù)據(jù)及行列值,即:
          double *m_originData; long m_row, m_col;
          在響應(yīng)函數(shù)中添加如下代碼
          CFileDialog fileDlg(TRUE);
          fileDlg.m_ofn.lpstrTitle=請選擇你的excel數(shù)據(jù);
          fileDlg.m_ofn.lpstrFilter=Text Files(*.xls)看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();