一个简单的看图小程序

    一个基于开源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,现在设置成与图片比例相同,同时把投影变换的横纵比修改为窗口的横纵比。试了几张图片,基本没问题。

2.程序使用截图

(1)启动

一个简单的看图小程序_第1张图片

(2)点击打开按钮

一个简单的看图小程序_第2张图片

(3)查看图片

一个简单的看图小程序_第3张图片

(4)拖动图片

一个简单的看图小程序_第4张图片

(5)鼠标滑轮缩放图片

一个简单的看图小程序_第5张图片

一个简单的看图小程序_第6张图片

 

基本上实现了一个看图软件的基本功能。图片支持的范围就是OpenCV的图片支持范围,常用的格式基本上都能看。体验上稍差。

 

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

转载于:https://www.cnblogs.com/betterwgo/p/6613686.html

你可能感兴趣的:(一个简单的看图小程序)