立体影像对观察量测平台(一)

打算做一个立体影像对的观察和量测的平台。为了防止遗忘,下面把实现步骤详细记录下来。

      拟采用单文档程序实现,使用CxImage库实现影像图片的保存和显示,使用拆分窗口分别显示两幅影像(或者使用一个窗口显示互补色的两幅影像)。

以下是详细步骤。

 

(一)建立单文档应用程序Stereo,视图类CStereoView类使用CScrollView类为基类,便于以后视图滚动,其余默认。

        添加2个新视图类(以默认的CStereoView类为基类)CLeftView和CRightView,用于显示分割后的两个左右视图。

注意:这里两个派生视图类需要通过VC的类生成向导进行生成,且需要先使用MFC的CView类为基类,生成后再更改其基类为CStereoView类。否则在后面的CreateView函数中不符合RUNTIME_CLASS参数要求。

(二)建立分割窗口。

在CMainFrame类下添加:

CSplitterWnd类变量m_wndSplit,   // 分割窗口

BOOL类型变量m_bCreateSpltr,     // 是否已创建分割窗口,主要是用于OnSize消息中分隔栏的位置调整

BYTE类型变量m_btImageNum,      // 判断读取的图像应该存入哪个对象

OnSize消息                                    // 调整窗口大小及分割栏的位置(居中)

OnCreateClient消息                       // 实现分割窗口的功能

在OnCreateClient消息中实现分割窗口:

首先在当前框架下创建1行2列的分割窗口,m_wndSplit.CreateStatic(this,1,2)。创建成功,设置m_bCreateSpltr为真。

然后获取客户区大小,GetClientRec(rc)。

为分割窗口创建2个视图,每个视图宽度为客户区宽度的一半,m_wndSplit.CreateView(0,0,RUNTIME_CLASS

(CLeftView),CSize(rc.Width()/2,rc.Height()),pContext);    // (0,0)为左视图,(0,1)为右视图

设置分隔栏的位置,使其始终居中,即令两个分割窗口始终大小相同,平分整个客户区,该功能在OnSize消息中实现:

当分割窗口创建成功时,设置m_wndSplit的列宽为整个客户区宽度的一半:

m_wndSplit.SetColumnInfo(0, rc.Width()/2, 0 )

然后重新计算显示分割窗口:m_wndSplit.RecalcLayout()。

分割后的结果如图:

分割窗口视图

 

(三)使用CxImage类库加载和显示图像。

      CxImage是一个源码公开的免费的图像操作库,支持绝大多数图像格式的读写和变换操作,使用它可以省去我们很多工作,我们不再需要针对各种图像格式编写相应的读写函数,从而利于我们将精力集中到要实现的主要功能上。现在CxImage库最新版本是7.0,这里使用的是6.0版本。CxImage的详细介绍见文章“CxImage图像库的使用”。

      使用CxImage库之前需要注意以下事项:

1.应用程序与CxImage的编译版本必须一致,即应用程序是Debug,则CxImage库也必须是Debug版。

2.VC环境设置为以下:

C++ --> Code Generation --> Use run-time library:Multithreaded DLL或Debug Multithreaded DLL

C++ --> Precompiled Headers:Not using precompiled Headers

C++ --> Preprocessor --> Additional include dircotories :../CxImageInclude   (CxImage库头文件的存放目录)

Link -->General --> Object/library modules:至少添加一个cximage.lib,可以支持bmp、gif等格式的图片,如果要支持jpeg、tiff等格式的图片,需要再添加其他库,这些库都可以通过CxImage源码工程生成。这里将lib文件都放置在工程目录下的CxImageLib目录下,因此这里填入的是:CxImageLib/cximage.lib CxImageLib/Jpeg.lib CxImageLib/Tiff.lib

Link --> Input --> Object/library modules:同上。

3.环境设置完即可以使用CxImage库进行图像的读取和显示操作了。

      这里将图像数据存放在文档类中,即在CStereoDoc类中添加CxImage类的变量:m_xImage, m_xImageLeft, m_xImageRight。其中后两个变量分别存放左右两张影像,第一用于存放经过红蓝颜色合成后的影像。

      此外,为了使文件打开能自动识别左右,还需要添加一个BOOL变量:m_bLeftImage。

      添加文件打开响应消息:OnFileOpen()。在该函数中设置文件打开对话框的文件格式过滤为我们支持的格式,如bmp、gif、jpeg、tiff等:

CString szFileExt = _T( "图像格式文件(*.bmp,*.jpg,*.gif,*.tiff)|*.bmp;*.jpg;*.gif;*.tiff||" ) ;
CFileDialog fdlg( TRUE, NULL, NULL, NULL, szFileExt, NULL ) ;

       读取打开文件之前首先判断要打开的是哪张图像,左图还是右图。fdlg.DoModal后通过获取文件名后缀来确定图像文件的格式,然后调用相应的CxImage对象加载图像:m_xImageLeft.Load( szFilePath, nImageType );

       加载完图像后,通知相应视图显示该图像:pView = (CStereoView*)(((CMainFrame*)AfxGetMainWnd())->m_wndSplit.GetPane(0,0)); pView->Invalidate( FALSE ) ;

       图像的显示需要在相应的视图类中OnDraw函数中进行,首先判断CxImage对象是否有效,如果已读取了图像,则显示图像:

pDoc->m_xImage.Draw( this->GetDC()->GetSafeHdc() ) ;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值