• 一个简单的看图小程序


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

  • 相关阅读:
    Find all Windows Phone Application Bar Icon
    DELL PowerConnect 5548[初步]配置
    删除SD的分区
    Import/Export a database into Oracle
    索爱U100i排线更换笔记
    forrtl: severe (174): SIGSEGV, segmentation fault occurred
    下载功能和上传功能的实现
    自我小结:手动给GridView添加数据源
    删除指定目录内的文件
    GridView数据源中没有数据的时候显示表头
  • 原文地址:https://www.cnblogs.com/betterwgo/p/6613686.html
Copyright © 2020-2023  润新知