通信工程原理之基于COM的MatIab的参数处理[4]

互联网技术 责任编辑:turtle48 2012-03-20

摘要: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]  

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

通信工程师备考资料免费领取

去领取

距离2025 通信工程师考试

还有
  • 0
  • 3
  • 7
专注在线职业教育24年

信息系统项目管理师

信息系统项目管理师

!
咨询在线老师!