一個基於開源C++界面庫SOUI,D3D,OpenCV的看圖小程序。沒什麼新知識,一時興起寫的。小程序
前些時間思路錯了,一直想經過D3D的座標變換來實現紋理的寬高比例與原圖一致,想破了腦殼也沒有實現。沒想到今天修改一下定點緩存座標,把頂點座標按照圖片的寬高比例設置一下,沒幾分鐘就實現了。緩存
float wh_rate = (float)Height / (float)Width ; float y_cor = 20 * wh_rate ; hr = Device->CreateVertexBuffer( 4 * sizeof(MultiTexVertex), D3DUSAGE_WRITEONLY, MultiTexVertex::FVF, D3DPOOL_MANAGED, &QuadVB, 0); MultiTexVertex* v = 0; QuadVB->Lock(0, 0, (void**)&v, 0); v[0] = MultiTexVertex(-20.0f, y_cor, 0.0f, 0.0f, 0.0f); v[1] = MultiTexVertex( 20.0f, y_cor, 0.0f, 1.0f, 0.0f); v[2] = MultiTexVertex( 20.0f, -y_cor, 0.0f, 1.0f, 1.0f); v[3] = MultiTexVertex(-20.0f, -y_cor, 0.0f, 0.0f, 1.0f); QuadVB->Unlock(); RECT rc ; GetClientRect(hwnd,&rc) ; float v_z = (float)rc.right / (float)rc.bottom ; D3DXMATRIX P; D3DXMatrixPerspectiveFovLH(&P, D3DX_PI * 0.5f, v_z, 1.0f, //近裁減面到座標原點的距離 1000.0f //遠裁減面到原點的距離 ); Device->SetTransform(D3DTS_PROJECTION, &P); Device->SetRenderState(D3DRS_LIGHTING, false);
以前定點緩存的X,Y都是20,如今設置成與圖片比例相同,同時把投影變換的橫縱比修改成窗口的橫縱比。試了幾張圖片,基本沒問題。spa
(1)啓動.net
(2)點擊打開按鈕code
(3)查看圖片orm
(4)拖動圖片blog
(5)鼠標滑輪縮放圖片圖片
基本上實現了一個看圖軟件的基本功能。圖片支持的範圍就是OpenCV的圖片支持範圍,經常使用的格式基本上都能看。體驗上稍差。get