新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > Matlab強大的數組處理功能如何解決圖像處理解析方

        Matlab強大的數組處理功能如何解決圖像處理解析方

        作者: 時間:2012-05-31 來源:網絡 收藏

        3 圖像嵌入VC界面[3]

        3.1 基于CWnd類的圖像嵌入

        在Windows操作系統下,所有應用程序的窗口都是基于MFC中的CWnd類。所以可以通過調用該類或其派生類中的方法實現圖像嵌入。基本思想:在平臺下用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);

        //圖像參數預設,保留工具欄。使用提供的工具欄的所有功能是使用該方法的最大優點

        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提供的工具欄。鑒于該缺點影響整體美觀,所以引入下面第二種方法。

        c++相關文章:c++教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 自治县| 台湾省| 山丹县| 会同县| 虹口区| 青河县| 凌云县| 巍山| 新巴尔虎右旗| 石河子市| 固安县| 龙井市| 榆树市| 赤城县| 日喀则市| 盐池县| 定边县| 松潘县| 舞阳县| 枞阳县| 康平县| 房山区| 土默特左旗| 乐都县| 吉安县| 沽源县| 襄樊市| 苏尼特左旗| 都兰县| 靖江市| 奎屯市| 获嘉县| 会东县| 克什克腾旗| 邵东县| 金沙县| 德格县| 亚东县| 万安县| 罗田县| 衡阳市|