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

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > Matlab強(qiáng)大的數(shù)組處理功能如何解決圖像處理解析方

          Matlab強(qiáng)大的數(shù)組處理功能如何解決圖像處理解析方

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

          3 圖像嵌入VC界面[3]

          3.1 基于CWnd類的圖像嵌入

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

          程序?qū)崿F(xiàn)如下:

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

          function [eigenvector,eigenvalue] = pcamat(oriData,row,column,picName)

          //增加picName參數(shù),VC平臺下hFig將通過該名稱獲取生成圖像的句柄

          figure(NumberTitle,Off,MenuBar,None,ToolBar,Figure,Name,picName,Units,Points);

          //圖像參數(shù)預(yù)設(shè),保留工具欄。使用提供的工具欄的所有功能是使用該方法的最大優(yōu)點

          percent = 100*eigenvalue /sum(eigenvalue);

          //計算貢獻(xiàn)率

          pareto(percent); //畫圖

          xlabel(主成分);

          ylabel(方差占的比重(%));

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

          CString WNDName = Demo; //自定義窗口名稱

          Ifigureclass *pic;

          VARIANT oriData, row, col, picName,eigVector, eigValue; VariantInit(picName);

          ……

          picName.vt = VT_BSTR; //將自定義窗口名稱賦予

          Matlab生成圖像

          picName.bstrVal = WNDName.AllocSysString();

          HWND hFig; int timer = 50;

          //用死循環(huán)確??梢垣@取到圖像句柄,注意此處必須使用sleep(),給予系統(tǒng)足夠的響應(yīng)時間

          while(1){

          pic->pcamat(2,eigVector,eigValue,oriData,row,col,

          picName);

          Sleep(timer);

          hFig = ::FindWindow(NULL,FigName);

          if(hFig != NULL){

          break;

          }

          timer += 10;

          pic->Release();

          }

          long lStyle = ::GetWindowLong(hFig,GWL_STYLE); //設(shè)置Figure窗口樣式。

          //注意SetWindowLong()和SetWindowPos()先后順序,詳見MSDN

          ::SetWindowLong(hFig,GWL_STYLE,lStyle(~WS_CAPTION)(~WS_THICKFRAME))

          ::SetWindowPos(hFig,NULL,0,0,0,0,SWP_NOMOVE|SWP_

          NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_

          FRAMECHANGED);CRect PlotRec;

          CWnd *PlotArea = GetDlgItem(IDC_STATIC_FIGURE); //設(shè)置圖像顯示區(qū)域

          PlotArea->GetWindowRect(PlotRec);

          long Width = PlotRec.right - PlotRec.left;

          long Height = PlotRec.bottom - PlotRec.top;

          ::SetParent(hFig,PlotArea->GetSafeHwnd());

          //設(shè)置圖像的父窗口

          ::SetWindowPos(hFig,NULL,0,0,Width,Height,SWP_NOZORDER|SWP_NOACTIVATE);

          該方法的缺點是,在圖像生成時會有閃爍現(xiàn)象。而優(yōu)點是前面提到的可以繼續(xù)使用Matlab提供的工具欄。鑒于該缺點影響整體美觀,所以引入下面第二種方法。

          c++相關(guān)文章:c++教程




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();