一个简单的看图小程序

一个基于开源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)启动

image

(2)点击打开按钮

image

(3)查看图片

image

(4)拖动图片

image

(5)鼠标滑轮缩放图片

image

image

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

源码:http://download.csdn.net/download/qq_33892166/9793016
原文链接: https://www.cnblogs.com/betterwgo/p/6613686.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/251355

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午5:14
下一篇 2023年2月14日 上午5:14

相关推荐