CBIRView.cpp
上传用户:xayxjz
上传日期:2022-08-07
资源大小:2188k
文件大小:4k
源码类别:

图形图象

开发平台:

Visual C++

  1. // CBIRView.cpp : implementation of the CCBIRView class
  2. //
  3. #include "stdafx.h"
  4. #include "CBIR.h"
  5. #include "CBIRDoc.h"
  6. #include "CBIRView.h"
  7. #include "PointPro.h"
  8. #include "DlgIntensity.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CCBIRView
  16. IMPLEMENT_DYNCREATE(CCBIRView, CScrollView)
  17. BEGIN_MESSAGE_MAP(CCBIRView, CScrollView)
  18. //{{AFX_MSG_MAP(CCBIRView)
  19. ON_COMMAND(ID_VIEW_HIST, OnViewHist)
  20. //}}AFX_MSG_MAP
  21. // Standard printing commands
  22. ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
  23. ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
  24. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
  25. END_MESSAGE_MAP()
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CCBIRView construction/destruction
  28. CCBIRView::CCBIRView()
  29. {
  30. // TODO: add construction code here
  31. }
  32. CCBIRView::~CCBIRView()
  33. {
  34. }
  35. BOOL CCBIRView::PreCreateWindow(CREATESTRUCT& cs)
  36. {
  37. // TODO: Modify the Window class or styles here by modifying
  38. //  the CREATESTRUCT cs
  39. return CScrollView::PreCreateWindow(cs);
  40. }
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CCBIRView drawing
  43. void CCBIRView::OnDraw(CDC* pDC)
  44. {
  45. CCBIRDoc* pDoc = GetDocument();
  46. ASSERT_VALID(pDoc);
  47. if( !pDoc->m_bImageLoaded)
  48. {
  49. pDoc->ReadImgToDoc();
  50. }
  51. //滚动窗口
  52. CSize sizeTotal;
  53. sizeTotal.cx = pDoc->m_pDibObject->GetWidth();
  54. sizeTotal.cy = pDoc->m_pDibObject->GetHeight();
  55. SetScrollSizes (MM_TEXT, sizeTotal);
  56. //获取客户区尺寸
  57. OnPrepareDC(pDC);
  58. CRect Rect;
  59. GetClientRect( &Rect );
  60. //获取图像宽度及高度
  61. int nImageWidth, nImageHeight;
  62. nImageWidth = pDoc->m_pDibObject->GetWidth();
  63. nImageHeight = pDoc->m_pDibObject->GetHeight();
  64. //当图像实际尺寸小于窗口尺寸时,将图像放在客户区中间
  65. int nX, nY;
  66. if( nImageWidth < Rect.Width() )
  67. nX = (Rect.Width() - nImageWidth ) / 2;
  68. else
  69. nX = 0;
  70. if( nImageHeight < Rect.Height() )
  71. nY = (Rect.Height() - nImageHeight ) / 2;
  72. else
  73. nY = 0;
  74. pDoc->m_pDibObject->Draw(pDC, nX, nY);
  75. }
  76. void CCBIRView::OnInitialUpdate()
  77. {
  78. CScrollView::OnInitialUpdate();
  79. CSize sizeTotal;
  80. // TODO: calculate the total size of this view
  81. sizeTotal.cx = sizeTotal.cy = 100;
  82. SetScrollSizes(MM_TEXT, sizeTotal);
  83. }
  84. /////////////////////////////////////////////////////////////////////////////
  85. // CCBIRView printing
  86. BOOL CCBIRView::OnPreparePrinting(CPrintInfo* pInfo)
  87. {
  88. // default preparation
  89. return DoPreparePrinting(pInfo);
  90. }
  91. void CCBIRView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  92. {
  93. // TODO: add extra initialization before printing
  94. }
  95. void CCBIRView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  96. {
  97. // TODO: add cleanup after printing
  98. }
  99. /////////////////////////////////////////////////////////////////////////////
  100. // CCBIRView diagnostics
  101. #ifdef _DEBUG
  102. void CCBIRView::AssertValid() const
  103. {
  104. CScrollView::AssertValid();
  105. }
  106. void CCBIRView::Dump(CDumpContext& dc) const
  107. {
  108. CScrollView::Dump(dc);
  109. }
  110. CCBIRDoc* CCBIRView::GetDocument() // non-debug version is inline
  111. {
  112. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCBIRDoc)));
  113. return (CCBIRDoc*)m_pDocument;
  114. }
  115. #endif //_DEBUG
  116. /////////////////////////////////////////////////////////////////////////////
  117. // CCBIRView message handlers
  118. void CCBIRView::OnViewHist() 
  119. {
  120. // TODO: Add your command handler code here
  121. CCBIRDoc* pDoc = GetDocument();
  122. ASSERT_VALID(pDoc);
  123. //判断当前是否有图像对象
  124. if( pDoc->m_pDibObject == NULL ) return;
  125. //在点处理CPointPro类中创建用来绘制直方图的数据
  126. CPointPro PointOperation( pDoc->m_pDibObject );
  127. int *pHistogram = PointOperation.GetHistogram();
  128. //生成一个对话框CHistDlg类的实例
  129. CDlgIntensity HistDlg;
  130. //将绘制直方图的数据传递给CHistDlg对话框类的公有成员变量m_pnHistogram
  131. if( pHistogram != NULL )
  132. {
  133. //设置直方图数据指针
  134. HistDlg.m_pnHistogram = pHistogram;
  135. //设置当前像素值为0的像素数
  136. HistDlg.m_nCurrentPiexsNum = pHistogram[0];
  137. //设置是否为256级灰度图像
  138. HistDlg.m_bIsGray256 = PointOperation.IsGray256();
  139. }
  140. //显示对话框
  141. if ( HistDlg.DoModal() != IDOK)
  142. return;
  143. delete [] pHistogram;
  144. }