一个简单的看图小程序

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值