zoukankan      html  css  js  c++  java
  • 一个简单的看图小程序

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

  • 相关阅读:
    Max Sum Plus Plus HDU
    Monkey and Banana HDU
    Ignatius and the Princess IV HDU
    Extended Traffic LightOJ
    Tram POJ
    Common Subsequence HDU
    最大连续子序列 HDU
    Max Sum HDU
    畅通工程再续
    River Hopscotch POJ
  • 原文地址:https://www.cnblogs.com/betterwgo/p/6613686.html
Copyright © 2011-2022 走看看