摘要:3Matlab圖像嵌入VC界面[3]3.1基于CWnd類的圖像嵌入在Windows操作系統下,所有應用程序的窗口都是基于MFC中的CWnd類。所以可以通過調用該類或其派生類中的方法實現圖像嵌入。基本思想:在Matlab平臺下用COM封裝產生圖形窗口的程序;在VC平臺獲取Figure窗口的句柄,將Figure窗口設為VC程序的子窗口;(3)將Figure窗口移動到指定顯示
3 Matlab圖像嵌入VC界面[3]
3.1 基于CWnd類的圖像嵌入
在Windows操作系統下,所有應用程序的窗口都是基于MFC中的CWnd類。所以可以通過調用該類或其派生類中的方法實現圖像嵌入。基本思想:在Matlab平臺下用COM封裝產生圖形窗口的程序;在VC平臺獲取Figure窗口的句柄,將Figure窗口設為VC程序的子窗口;(3)將Figure窗口移動到指定顯示位置。
程序實現如下:
(1)將原pcamat.m進行修改,添加生成圖像的相關代碼
function [eigenvector,eigenvalue] = pcamat(oriData,row,column,picName)
//增加picName參數,VC平臺下hFig將通過該名稱獲取生成圖像的句柄
figure(‘NumberTitle','Off','MenuBar','None','ToolBar','Figure','Name',picName,'Units','Points’);
//圖像參數預設,保留工具欄。使用Matlab提供的工具欄的所有功能是使用該方法的最大優點
percent = 100*eigenvalue /sum(eigenvalue);
//計算貢獻率
pareto(percent); //畫圖
xlabel(‘主成分’);
ylabel(‘方差占的比重(%)’);
(2)封裝打包成名為figure的COM組件,并完成注冊等相關操作。因為修改后的m文件運行結果包含輸出結果和圖像兩部分,所以下面有關圖像處理的代碼依然在PCATest控件的響應函數中。
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;
//用死循環確保可以獲取到圖像句柄,注意此處必須使用sleep(),給予系統足夠的響應時間
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); //設置Figure窗口樣式。[1] [2] [3] [4] [5]
溫馨提示:因考試政策、內容不斷變化與調整,本網站提供的以上信息僅供參考,如有異議,請考生以權威部門公布的內容為準!