《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于COM的Matlab參數處理與圖像嵌入在VC中的實現
基于COM的Matlab參數處理與圖像嵌入在VC中的實現
來源:微型機與應用2011年第24期
王 維, 劉 斌, 柳炳利, 魏友華
(成都理工大學 數學地質四川省重點實驗室, 四川 成都 610059)
摘要: 通過運用Matlab與VC的語言和平臺特性,解決了二維數組參數的傳遞與輸出;介紹兩種Matlab圖像嵌入VC界面的方法,并以主成分分析為實例,講解了相關細節與難點。同時,介紹了一種更加靈活、簡便的讀取Excel文件的方法。
Abstract:
Key words :

摘  要:通過運用MatlabVC的語言和平臺特性,解決了二維數組參數的傳遞與輸出;介紹兩種Matlab圖像嵌入VC界面的方法,并以主成分分析為實例,講解了相關細節與難點。同時,介紹了一種更加靈活、簡便的讀取Excel文件的方法。
關鍵詞: COM組件; Matlab; VC; 二維數組; 圖像嵌入

    基于COM組件的Matlab與C++混合編程方式因擁有獨立的運行環境和兩種語言的互補優勢而被眾多科研人員和編程人員所接受,同時也是MathWorks公司推薦使用的混編方式。但在程序設計過程中,通常會遇到兩個難點問題:(1)二維數組參數的傳遞與輸出; (2)Matlab生成圖形嵌入VC工程界面中。對于第一個問題,Bruce McKinney[1]在MSDN上指出;“如果對一維數組進行操作,則SAFEARRAY函數變的簡單且易操作。但是對于多維數組,同樣的操作要復雜得多”,造成這一問題的根源在于Matlab與C++對多維數組元素的存儲方式不同。而在本項目開發過程中回避了這個復雜的過程,轉而利用Matlab強大的數組處理功能將其解決。Matlab完善的圖形處理功能是其被科研人員所推崇的原因之一,但因其圖形擁有獨立的窗口,嚴重影響了整體界面美觀和用戶交互體驗,所以Matlab圖形嵌入是混合編程中不可回避的問題。對此將通過實例介紹兩種圖形嵌入方法并分析說明其優缺點和相關細節。
    本文示例均在Matlab R2008a和VC 6.0平臺下完成,且通過調試能夠正常運行。
1 Excel文件讀取方法
    VC平臺下的Excel文件讀取方式復雜難懂,但如果使用Matlab與VC的混合編程方式編寫將更加簡便,而且擁有較強的可擴展性。下面代碼詳細講解了該過程。
    (1)在Matlab平臺下建立CExcelRead.m文件,代碼如下:
    function [output,row,col] = CExcelRead(filePath)
    //filePath包含了指定文件的路徑和文件名,由VC平臺函數GetPathName()獲取
    [typ, desc] = xlsfinfo(filePath);
    //xlsfinfo()可獲取指定Excel文件中各個sheet工作區的名稱,返回值存入名為desc的cell數組中
    sheet1 = cell2mat(desc(1));
    //默認打開”sheet1”(名稱任意),并將其轉換為字符串
    output = xlsread(filePath,sheet1);
    //返回該Excel文件中的數據,返回值存入output數組中
    [row,col] = size(output);
    //獲取錄入數據的行列值,返回到VC平臺以供其拷貝指定內存大小的數據
    output = reshape(output,row*col,1);
    //將該二維數組轉換為一維。這是第二部分二維數組處理的第一步
    保存文件后,使用deploytool工具將其制作成名為FileOpen的COM(封裝MCR),注冊該控件并將相應的文件拷貝到MFC的工程中,對于基礎操作此處不再贅述。
    (2)在VC平臺下創建名為PCA的基于對話框的MFC工程,添加一打開文件的按鈕控件,ID為ID_FILE_OPEN。篇幅所限只給出部分核心代碼,首先在Dlg類中添加3個私有成員變量用以保存Matlab讀取的數據及行列值,即:
    double *m_originData; long   m_row, m_col;
    在響應函數中添加如下代碼
    CFileDialog fileDlg(TRUE); 
    fileDlg.m_ofn.lpstrTitle="請選擇你的excel數據";
    fileDlg.m_ofn.lpstrFilter="Text Files(*.xls)\0*.xls\0All Files(*.*)\0*.*\0\0";
  if(IDOK==fileDlg.DoModal() {
     CString fileName; IFileOpenclass *pfile;
    VARIANT filePath,output,rowOutput,colOutput;
                                //m文件的輸入參數
    fileName = fileDlg.GetPathName();
                          //獲取文件路徑并存于fileName中
    CoInitialize(NULL);                                //COM初始化
    HRESULT hr = CoCreateInstance(CLSID_FileOpenclass,NULL,CLSCTX_ALL,IID_IFileOpenclass,(void**)&pfile);
                                    //新建COM實例
    VariantInit(&filePath);              //VARIANT數據初始化
    
    filePath.vt = VT_BSTR;           //指定filePath變量類型
    //將fileName中保存的指定文件路徑名保存至filePath參數中
    filePath.bstrVal = fileName.AllocSysString();
    pfile->CExcelRead(3,&output,&rowOutput, &colOutput,filePath);
    m_row=(long) rowOutput.dblVal;       
                                 //取出行列值及錄入數據
    m_col = (long) colOutput.dblVal;
     m_originData = (double *)malloc(sizeof(double)*m_row*m_
col); memcpy(m_originData,output.parray->pvData,m_row*m_
col*sizeof(double));
        //將matlab讀入數據保存到m_originData供后面程序使用
    } 上述C++代碼中省略了異常處理和相關的內存、COM釋放代碼,由于代碼比較簡單所以不做進一步解析。請注意,下面將省略COM初始化及實例化等相同代碼。
    (3) 需要重點說明的是該方法的擴展性。通常Excel文件中保存多個工作區,有時用戶可能需要打開同一Excel文件中不同工作區中的數據,常規方法實現過于復雜,但對于本文介紹的方法可以通過修改添加幾條語句即可實現。首先,新建一個m文件用來處理工作區的選擇,代碼如下:
    function [sheet,col] = CSheetSelected(filePath)
    [typ, sheet] = xlsfinfo(filePath);
    [row,col] = size(sheet);
    由于返回值是一個cell數組,所以VC平臺要使用CStringArray數據結構保存返回值,并顯示各工作區名稱供用戶選擇。然后,通過人機交互將用戶選擇的工作區參數保存并傳遞至CExcelRead.m,通過在CExcelRead.m增加一個工作區選擇參數,并對代碼稍作修改即可。
2 二維數組參數的傳遞與輸出[2]
    下面以主成分分析為例介紹基于COM的Matlab與VC混合編程中二維數組參數處理。
    (1) 主成分分析pcamat.m代碼如下:
    function [eigenvector,eigenvalue] = pcamat(oriData,row,column)
    //在Excel讀入時已經完成了二維數組輸出的關鍵步驟,即輸出時將二維數組轉換為一維數組。但在VC平臺接收還原為二維時要注意,Matlab數組存儲方式是按列存儲,而VC平臺下數組是按行存儲,所以轉換時0~row-1為第一列,row~2*row-1為第二列,以此類推。本文輸入參數oriData是一維數組,所以要將其還原為二維數組使Matlab程序能夠正常運行,即下一行代碼所示。
    oriData = reshape(oriData,row,column);
    dataSTD=std(oriData,0,1); dataMean = mean(oriData);
    dataSR = (oriData-dataMean(ones(row,1),:))./dataSTD(ones(row,1),:);
    [eigenvector,newdata,eigenvalue,Exa]=princomp(dataSR);
    //第三行至此處均為主成分分析內容
    eigenvector = reshape(eigenvector,column*column,1);
    //與Excel文件讀取時類似,將二維輸出轉換為一維數組進行輸出
    (2) 保存后,封裝打包為COM組件,并完成注冊等相關操作。在PCA工程對話框上添加一個名為PCATest的按鈕控件,核心代碼如下:
    VARIANT oriData,row,column,eigVector,eigValue;
    VariantInit(&oriData);                             //參數初始化
    
    oriData.vt = VT_R8|VT_ARRAY;
                           //定義SAFEARRAY類型的一維數組
    SAFEARRAYBOUND rgsadound[1];
    rgsadound[0].lLbound = 0;
    rgsadound[0].cElements = m_row*m_col;
    oriData.parray = SafeArrayCreate(VT_R8,1,rgsadound);    
    oriData.parray->pvData = m_originData;
    //完成相關設置后,將第一步讀入的數據錄入到oriData中,即賦給pcamat的oriData。到此完成了二維數組的傳遞
    row.vt = VT_I4; col.vt = VT_I4;
    row.lVal = m_row; col.lVal = m_col;
    pca->pcamat(2,&eigVector,&eigValue,oriData,row,col);
    memcpy(result, eigVector.parray->pvData,m_col*m_col*
sizeof(double));
    綜上,二維數組參數處理就是使用reshape()函數對輸入輸出數據維數進行變換來完成操作。
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窗口樣式。
    //注意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);
    運行結果如圖1所示。該方法的缺點是,在圖像生成時會有閃爍現象。而優點是前面提到的可以繼續使用Matlab提供的工具欄。鑒于該缺點影響整體美觀,所以引入下面第二種方法。

3.2基于Bitmap類的圖像嵌入
    通過Bitmap類將Matlab生成的.bmp文件加載到VC工程中,使用Bitmap類中的成員函數對圖像進行處理。由于相關函數可以通過幫助手冊獲取,所以此處不再給出相應代碼,運行結果如圖2所示。該方法避免了方法一生成圖像時的閃爍現象,但是BMP圖像顯示效果較差而且無法使用Matlab提供的工具菜單,這是其不足之處。

    使用COM組件進行混合編程時,往往習慣于在VC平臺下思考所遇到的問題,但是這樣不僅使得問題可能變得復雜化,或得不到妥善解決,而且也違背了“混合”的初衷。二維數組參數處理就是一個很好的例證。其次,充分利用Matlab特性可以使得程序具備良好的擴展性和穩定性,對Excel文件讀取方式進行的擴展,明顯使軟件更加人性化。對于圖像嵌入問題,雖然文中提出的兩種嵌入方式可以滿足基本需求,但是仍然存在一些瑕疵,還需要進一步研究。
參考文獻
[1] MCKINNEY B. Article 5. The Safe OLE Way of Handling  Arrays.MSDN, 2001.
[2] 劉維.精通Matlab與C++混合程序設計(第2版)[M].北京:北京航空航天大學出版社,2008.
[3] 董維國.深入淺出Matlab 7.X混合編程[M].北京:機械工業出版社,2006.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产日韩欧美精品一区| 日韩亚洲精品在线| 国产精品九九久久久久久久| 亚洲综合国产激情另类一区| 香蕉亚洲视频| 亚洲国产精品日韩| 在线免费观看视频一区| 黄色影院成人| 欧美视频四区| 欧美一进一出视频| 国产目拍亚洲精品99久久精品| 欧美成人国产va精品日本一级| 国产一二精品视频| 亚洲免费激情| 欧美.www| 久久久国产一区二区三区| 亚洲欧美制服另类日韩| 午夜国产欧美理论在线播放| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲精品一区二区三区99| 久久久91精品| 亚洲无线一线二线三线区别av| 国产真实久久| 亚洲毛片av| 国产精品一区久久| 午夜国产不卡在线观看视频| 午夜一区二区三视频在线观看| 亚洲欧美在线观看| 久久免费国产| 噜噜噜躁狠狠躁狠狠精品视频| 欧美视频在线观看一区二区| 亚洲国产人成综合网站| 午夜精品视频在线| 黑人巨大精品欧美黑白配亚洲| 欧美高清不卡在线| 久久国产一区二区| 永久免费精品影视网站| 亚洲一级网站| 欧美色123| 欧美精品久久久久久久| 在线中文字幕一区| 欧美电影电视剧在线观看| 欧美日韩免费观看一区三区| 在线观看中文字幕不卡| 国产精品综合网站| 欧美精品在线观看一区二区| 欧美另类在线观看| 欧美精选一区| 久久人人97超碰精品888| 一本久道久久综合中文字幕| 久久婷婷国产综合国色天香| 欧美在线国产精品| 亚洲视频视频在线| 国产精品羞羞答答xxdd| 午夜久久资源| 亚洲另类黄色| 久久久久久久欧美精品| 国产精品一区在线观看| 亚洲欧洲日本国产| 国产日韩1区| 久久精品国产清高在天天线| 欧美 日韩 国产精品免费观看| 国产精品成av人在线视午夜片| 中文日韩在线| 久久综合久久综合这里只有精品| 亚洲人被黑人高潮完整版| 久久亚洲精品一区| 久久本道综合色狠狠五月| 久久成人精品一区二区三区| 中文精品99久久国产香蕉| 精品盗摄一区二区三区| 欧美一区二区视频免费观看| 亚洲精品中文字幕有码专区| 狠狠爱成人网| 欧美视频日韩视频在线观看| 国产亚洲精品一区二区| 国模精品娜娜一二三区| 国产伪娘ts一区| 亚洲一区成人| 伊人精品久久久久7777| 亚洲一区二区少妇| 国产乱码精品一区二区三| 国产精品久久婷婷六月丁香| 在线中文字幕不卡| 亚洲亚洲精品三区日韩精品在线视频| 欧美国产日韩精品免费观看| 另类成人小视频在线| 亚洲一本视频| 欧美日韩精品一二三区| 开心色5月久久精品| 久久av在线看| 性做久久久久久免费观看欧美| 欧美电影在线观看完整版| 久久国产视频网| 亚洲国产天堂久久国产91| 欧美中文字幕视频| 狠狠综合久久| 99riav久久精品riav| 欧美成人一区二区三区| 日韩视频免费大全中文字幕| 欧美激情一区在线| 欧美激情第五页| 欧美在线视频免费播放| 亚洲欧美国产精品va在线观看| 国产精品人人爽人人做我的可爱| 一本色道久久综合亚洲精品不| 亚洲精选一区二区| 日韩午夜在线电影| 亚洲一区二区在线| 亚洲精选视频免费看| 激情一区二区三区| 欧美一级淫片aaaaaaa视频| 欧美福利精品| 午夜精彩视频在线观看不卡| 亚洲经典视频在线观看| 久久青青草原一区二区| 国内精品久久久| 国产在线精品成人一区二区三区| 国产性做久久久久久| 亚洲国产99| 欧美日韩成人一区二区三区| 国产香蕉久久精品综合网| 国产一区二区三区日韩欧美| 欧美一区二区在线观看| 性做久久久久久久免费看| 老司机精品福利视频| 91久久精品国产| 国产在线观看一区| 国产精品自拍在线| 国产亚洲高清视频| 激情91久久| 国产亚洲精品bt天堂精选| 亚洲乱码精品一二三四区日韩在线| 国产一区日韩二区欧美三区| 久久精品视频在线播放| 欧美一二三区在线观看| 日韩系列在线| 久久精品一区四区| 一区二区三区精品国产| 久久精品久久综合| 欧美在线免费| 欧美三级乱码| 欧美一区二区三区四区夜夜大片| 亚洲大片一区二区三区| 久久国产精品毛片| 麻豆久久久9性大片| 在线不卡亚洲| 欧美日韩国内| 在线综合亚洲欧美在线视频| 国产精品国产亚洲精品看不卡15| 国产欧美欧洲在线观看| 欧美日韩三级电影在线| 久久久久国产一区二区三区四区| 夜色激情一区二区| 久久精品一区二区国产| 韩国三级电影一区二区| 欧美国产日韩亚洲一区| 巨胸喷奶水www久久久免费动漫| 欧美成人午夜| 亚洲国产成人91精品| 日韩一二三区视频| 欧美日韩在线影院| 99热免费精品| 国产日韩精品入口| 国产精品久久久久久久免费软件| 欧美日韩高清不卡| 欧美高清在线视频| 国产精品羞羞答答xxdd| 国产精品v亚洲精品v日韩精品| 欧美诱惑福利视频| 亚洲尤物在线| 久久精品91久久久久久再现| 亚洲人成人一区二区在线观看| 欧美日韩美女一区二区| 亚洲欧洲一区二区三区在线观看| 欧美日本在线观看| 美女性感视频久久久| 亚洲黄色成人| 久久精品欧洲| 亚洲性夜色噜噜噜7777| 国产欧美日韩视频一区二区三区| 亚洲国产婷婷香蕉久久久久久99| 欧美日韩在线影院| 亚洲狼人精品一区二区三区| 亚洲欧美成aⅴ人在线观看| 国产精品对白刺激久久久| 在线综合欧美| 欧美激情综合色综合啪啪| 先锋影音国产精品| 亚洲欧美日韩一区在线观看| 国产一区观看| 欧美精品久久天天躁| 亚洲综合清纯丝袜自拍| 国产一区二区三区在线观看精品| 亚洲精品一区久久久久久| 欧美精品久久久久久| 久久九九精品| 亚洲你懂的在线视频| 亚洲无线一线二线三线区别av| 欧美激情第三页| 亚洲三级影片| 亚洲一区二区av电影| 在线国产精品播放| 夜夜夜精品看看| 国产麻豆精品久久一二三| 国产美女精品一区二区三区| 欧美与黑人午夜性猛交久久久| 国产视频精品va久久久久久| 亚洲福利视频网站| 国产日韩欧美一区二区三区四区| 亚洲人成人一区二区三区| 国产精品美腿一区在线看| 午夜精品美女自拍福到在线| 蜜桃av综合| 亚洲伦理精品| 国产精品永久在线| 91久久综合亚洲鲁鲁五月天| 国产综合色在线| 在线一区二区日韩| 欧美激情一区二区| 欧美中文字幕视频在线观看| 国产日韩一区| 久久免费精品日本久久中文字幕| 免费不卡欧美自拍视频| 久久综合色婷婷| 午夜在线视频一区二区区别| 蜜桃av噜噜一区| 欧美日韩午夜剧场| 亚洲美女av电影| 国产日韩欧美综合一区| 蜜桃久久精品一区二区| 欧美亚洲在线视频| 亚洲视频欧洲视频| 亚洲人成77777在线观看网| 亚洲开发第一视频在线播放| 91久久午夜| 亚洲国产精品久久久久婷婷884| 亚洲影视综合| 欧美日韩在线观看一区二区| 国产日韩一级二级三级| 亚洲久久视频| 蜜臀91精品一区二区三区| 午夜伦欧美伦电影理论片| 亚洲高清中文字幕| 亚洲免费在线播放| 国产亚洲精品久| 激情五月综合色婷婷一区二区| 亚洲免费在线视频一区 二区| 久久久亚洲一区| 9久re热视频在线精品| 亚洲欧洲日本在线| 黄色一区二区三区四区| 黄色日韩网站| 国产美女扒开尿口久久久| 亚洲第一色在线| 亚洲一区自拍| 国产精品一区久久| 亚洲激情综合| 国产精品久久福利| 亚洲国产精品久久| 久色成人在线| 在线免费观看成人网| 国内精品国产成人| 欧美三级小说| 91久久精品国产| 牛牛国产精品| 午夜视频在线观看一区二区三区| 久久久久久亚洲综合影院红桃| 欧美视频在线免费看| 一区二区三区回区在观看免费视频| 一区二区三区高清在线观看| 玖玖玖免费嫩草在线影院一区| 中国成人亚色综合网站| 欧美日韩国产精品专区| 久久国产精品黑丝| 亚洲免费观看高清在线观看| 久久久九九九九| 国产精品久久久一本精品| 国产精品永久免费在线| 亚洲国产精品嫩草影院| 亚洲香蕉网站| 欧美精品在线极品| 欧美午夜不卡| 亚洲日本一区二区三区| 亚洲天堂网在线观看| 久久精品日韩一区二区三区| 国产精品亚洲综合久久| 亚洲一区二区黄色| 免费永久网站黄欧美| 国产日产欧美精品| 国产日本欧美一区二区| 极品av少妇一区二区| 久久久人成影片一区二区三区| 亚洲精品网站在线播放gif| 亚洲精品日韩久久| 国产一区二区在线免费观看| 欧美日韩在线大尺度| 国产欧美一区二区白浆黑人| 午夜精品视频在线观看一区二区| 欧美日韩123| 亚洲国产电影| 欧美一区在线看| 欧美视频在线免费看| 久久久精品国产99久久精品芒果| 最新成人在线| 国产精品午夜视频| 久久资源在线| 国产精品女人久久久久久| 欧美系列亚洲系列| 午夜久久99| 美女主播视频一区| 午夜视频在线观看一区| 亚洲欧美日韩人成在线播放| 日韩视频在线免费| 欧美久久久久中文字幕| 美女视频黄 久久| 亚洲国产日韩欧美一区二区三区| aa亚洲婷婷| 亚洲一区二区三区午夜| 亚洲综合色丁香婷婷六月图片| 国产精品vip| 老司机亚洲精品| 国产精品二区三区四区| 精品1区2区3区4区| 亚洲精品视频在线播放| 在线视频精品一区| 国产精品拍天天在线| 国产一级揄自揄精品视频|