您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术两种图形嵌入方法并分析说明 正文
两种图形嵌入方法并分析说明

两种图形嵌入方法并分析说明

点击数:7388 次   录入时间:03-04 11:45:20   整理:http://www.55dianzi.com   嵌入式系统-技术

    程序实现如下:

    (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窗口样式。

    //注意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); //设置图像显示区域

    PlotArea->GetWindowRect(&PlotRec);

    long Width = PlotRec.right - PlotRec.left;

    long Height = PlotRec.bottom - PlotRec.top;

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

    //设置图像的父窗口

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

    该方法的缺点是,在图像生成时会有闪烁现象。而优点是前面提到的可以继续使用Matlab提供的工具栏。鉴于该缺点影响整体美观,所以引入下面第二种方法。

   



www.55dianzi.com

    3.2基于Bitmap类的图像嵌入

    通过Bitmap类将Matlab生成的.bmp文件加载到VC工程中,使用Bitmap类中的成员函数对图像进行处理。由于相关函数可以通过帮助手册获取,所以此处不再给出相应代码,运行结果如图2所示。该方法避免了方法一生成图像时的闪烁现象,但是BMP图像显示效果较差而且无法使用Matlab提供的工具菜单,这是其不足之处。

    使用COM组件进行混合编程时,往往习惯于在VC平台下思考所遇到的问题,但是这样不仅使得问题可能变得复杂化,或得不到妥善解决,而且也违背了“混合”的初衷。二维数组参数处理就是一个很好的例证。其次,充分利用Matlab特性可以使得程序具备良好的扩展性和稳定性,对Excel文件读取方式进行的扩展,明显使软件更加人性化。对于图像嵌入问题,虽然文中提出的两种嵌入方式可以满足基本需求,但是仍然存在一些瑕疵,还需要进一步研究。



上一页  [1] [2] 


本文关键字:暂无联系方式嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术

《两种图形嵌入方法并分析说明》相关文章>>>