一個簡單的看圖小程序

    一個基於開源C++界面庫SOUI,D3D,OpenCV的看圖小程序。沒什麼新知識,一時興起寫的。小程序

1.按照圖片大小設置頂點緩存的座標

    前些時間思路錯了,一直想經過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

2.程序使用截圖

(1)啓動.net

image

(2)點擊打開按鈕code

image

(3)查看圖片orm

image

(4)拖動圖片blog

image

(5)鼠標滑輪縮放圖片圖片

image

image

 

基本上實現了一個看圖軟件的基本功能。圖片支持的範圍就是OpenCV的圖片支持範圍,經常使用的格式基本上都能看。體驗上稍差。get

 

源碼:http://download.csdn.net/download/qq_33892166/9793016源碼

相關文章
相關標籤/搜索