ShowDIBView.cpp
Upload User: hongxinly
Upload Date: 2022-06-13
Package Size: 2588k
Code Size: 10k
Category:

Special Effects

Development Platform:

Visual C++

  1. // ShowDIBView.cpp : implementation of the CShowDIBView class
  2. //
  3. #include "stdafx.h"
  4. #include "ShowDIB.h"
  5. #include "DIB.h"
  6. #include "ShowDIBDoc.h"
  7. #include "ShowDIBView.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CShowDIBView
  15. IMPLEMENT_DYNCREATE(CShowDIBView, CView)
  16. BEGIN_MESSAGE_MAP(CShowDIBView, CView)
  17. //{{AFX_MSG_MAP(CShowDIBView)
  18. ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
  19. ON_COMMAND(ID_STYLE_STRETCHED, OnStyleStretched)
  20. ON_COMMAND(ID_STYLE_NORMAL, OnStyleNormal)
  21. ON_COMMAND(ID_FILE_SAVE, OnFileSave)
  22. ON_COMMAND(ID_PROCESS_2value, OnPROCESS2value)
  23. ON_COMMAND(ID_Invert, OnInvert)
  24. ON_COMMAND(ID_VMax, OnVMax)
  25. ON_COMMAND(ID_VMin, OnVMin)
  26. ON_COMMAND(ID_VAve, OnVAve)
  27. ON_COMMAND(ID_REVERSE, OnReverse)
  28. ON_COMMAND(ID_POINT_LINER, OnPointLiner)
  29. ON_COMMAND(ID_HISTOGRAM, OnHistogram)
  30. ON_COMMAND(ID_HIST_EQUA, OnHistEqua)
  31. ON_COMMAND(ID_GEOM_TRAN, OnGeomTran)
  32. ON_COMMAND(ID_GEOM_ZOOM, OnGeomZoom)
  33. ON_COMMAND(ID_GEOM_ROTA, OnGeomRota)
  34. ON_COMMAND(ID_FFT, OnFft)
  35. ON_COMMAND(ID_DCT, OnDct)
  36. ON_COMMAND(ID_FREQ_WALH, OnFreqWalh)
  37. ON_COMMAND(ID_FREQ_WAVE, OnFreqWave)
  38. ON_COMMAND(ID_ENHA_AverF, OnENHAAverF)
  39. ON_COMMAND(ID_ENHA_MidianF, OnENHAMidianF)
  40. ON_COMMAND(ID_ENHA_SOBEL, OnEnhaSobel)
  41. ON_COMMAND(ID_ENHA_LAPLACE, OnEnhaLaplace)
  42. ON_COMMAND(ID_RESTORE_RANDOMNOISE, OnRestoreRandomnoise)
  43. ON_COMMAND(ID_RESTORE_SALTNOISE, OnRestoreSaltnoise)
  44. ON_COMMAND(ID_RESTORE_INVERSE, OnRestoreInverse)
  45. ON_COMMAND(ID_RESTORE_WIENER, OnRestoreWiener)
  46. ON_COMMAND(ID_RECON, OnRecon)
  47. ON_COMMAND(ID_HUFFMAN, OnHuffman)
  48. ON_COMMAND(ID_RUNLENGTH, OnRunlength)
  49. ON_COMMAND(ID_ALGORITH, OnAlgorith)
  50. ON_COMMAND(ID_LZW, OnLzw)
  51. ON_COMMAND(ID_JPEG, OnJpeg)
  52. //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CShowDIBView construction/destruction
  56. CShowDIBView::CShowDIBView()
  57. {
  58. ImageStyle = 0;
  59. }
  60. CShowDIBView::~CShowDIBView()
  61. {
  62. }
  63. BOOL CShowDIBView::PreCreateWindow(CREATESTRUCT& cs)
  64. {
  65. return CView::PreCreateWindow(cs);
  66. }
  67. /////////////////////////////////////////////////////////////////////////////
  68. // CShowDIBView drawing
  69. void CShowDIBView::OnDraw(CDC* pDC)
  70. {
  71. CShowDIBDoc* pDoc = GetDocument();
  72. ASSERT_VALID(pDoc);
  73. RECT Rect;
  74. GetClientRect( &Rect );
  75. m_Dib.SetPalette( pDC );
  76. m_Dib.Draw( pDC, 0, 0, Rect.right, Rect.bottom, ImageStyle );
  77. }
  78. /////////////////////////////////////////////////////////////////////////////
  79. // CShowDIBView diagnostics
  80. #ifdef _DEBUG
  81. void CShowDIBView::AssertValid() const
  82. {
  83. CView::AssertValid();
  84. }
  85. void CShowDIBView::Dump(CDumpContext& dc) const
  86. {
  87. CView::Dump(dc);
  88. }
  89. CShowDIBDoc* CShowDIBView::GetDocument()
  90. // non-debug version is inline
  91. {
  92. ASSERT(
  93. m_pDocument->IsKindOf(RUNTIME_CLASS(CShowDIBDoc)));
  94. return (CShowDIBDoc*)m_pDocument;
  95. }
  96. #endif //_DEBUG
  97. /////////////////////////////////////////////////////////////////////////////
  98. // CShowDIBView message handlers
  99. void CShowDIBView::OnFileOpen() 
  100. {
  101. static char szFilter[] = "BMP Files(*.BMP)|*.BMP|All Files(*.*)|*.*||";
  102. CFileDialog FileDlg( TRUE, NULL, NULL,
  103. OFN_HIDEREADONLY, szFilter );
  104. if( FileDlg.DoModal() == IDOK &&
  105. m_Dib.Load( FileDlg.GetPathName() ) ){
  106. InvalidateRect( NULL, TRUE );
  107. UpdateWindow();
  108. }
  109. }
  110. void CShowDIBView::OnStyleStretched() 
  111. {
  112. // TODO: Add your command handler code here
  113. ImageStyle = 1;
  114. CMenu *pMnu = AfxGetMainWnd()->GetMenu( );
  115. pMnu->CheckMenuItem(ID_STYLE_STRETCHED,MF_CHECKED);
  116. pMnu->CheckMenuItem(ID_STYLE_NORMAL,MF_UNCHECKED);
  117. InvalidateRect( NULL, TRUE );
  118. UpdateWindow();
  119. }
  120. void CShowDIBView::OnStyleNormal() 
  121. {
  122. // TODO: Add your command handler code here
  123. ImageStyle = 0;
  124. CMenu *pMnu = AfxGetMainWnd()->GetMenu( );
  125. pMnu->CheckMenuItem(ID_STYLE_STRETCHED,MF_UNCHECKED);
  126. pMnu->CheckMenuItem(ID_STYLE_NORMAL,MF_CHECKED);
  127. InvalidateRect( NULL, TRUE );
  128. UpdateWindow();
  129. }
  130. void CShowDIBView::OnFileSave() 
  131. {
  132. // TODO: Add your command handler code here
  133. static char szFilter[] = "BMP Files(*.BMP)|*.BMP|All Files(*.*)|*.*||";
  134. CFileDialog FileDlg( FALSE, "bmp", NULL,
  135. OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter );
  136. if( FileDlg.DoModal() == IDOK &&
  137. m_Dib.Save( FileDlg.GetPathName() ) ){
  138. InvalidateRect( NULL, TRUE );
  139. UpdateWindow();
  140. }
  141. }
  142. //////调用2值化处理函数//////////
  143. void CShowDIBView::OnPROCESS2value() 
  144. {
  145. // TODO: Add your command handler code here
  146. if (m_Dib.ConvertToTwoValue())
  147. {
  148. InvalidateRect( NULL, TRUE );
  149. UpdateWindow();
  150. }
  151. }
  152. /////////调用彩色图像向灰度图像转化的函数/////////
  153. void CShowDIBView::OnInvert() 
  154. {
  155. // TODO: Add your command handler code here
  156. m_Dib.RGB2GRAY();
  157. InvalidateRect( NULL, TRUE );
  158. UpdateWindow();
  159. }
  160. ///////求图像最大像素值/////////////
  161. void CShowDIBView::OnVMax() 
  162. {
  163. // TODO: Add your command handler code here
  164. int MaxValue = m_Dib.GetMax();
  165.     CString max;
  166. max.Format("%d",MaxValue);
  167. AfxMessageBox(max);
  168. InvalidateRect( NULL, TRUE );
  169. UpdateWindow();
  170. }
  171. ///////求图像最小像素值/////////////
  172. void CShowDIBView::OnVMin() 
  173. {
  174. // TODO: Add your command handler code here
  175. int MinValue = m_Dib.GetMin();
  176.     CString min;
  177. min.Format("%d",MinValue);
  178. AfxMessageBox(min);
  179. InvalidateRect( NULL, TRUE );
  180. UpdateWindow();
  181. }
  182. ///////求图像的像素平均值/////////////
  183. void CShowDIBView::OnVAve() 
  184. {
  185. // TODO: Add your command handler code here
  186. float AveValue = m_Dib.GetAve();
  187.     CString ave;
  188. ave.Format("%f",AveValue);
  189. AfxMessageBox(ave);
  190. InvalidateRect( NULL, TRUE );
  191. UpdateWindow();
  192. }
  193. //////图像反转/////
  194. void CShowDIBView::OnReverse() 
  195. {
  196. // TODO: Add your command handler code here
  197. m_Dib.Reverse();
  198. InvalidateRect( NULL, TRUE );
  199. UpdateWindow();
  200. }
  201. //////线性变换//////
  202. void CShowDIBView::OnPointLiner() 
  203. {
  204. // TODO: Add your command handler code here
  205. m_Dib.Pointlinear();
  206. InvalidateRect( NULL, TRUE );
  207. UpdateWindow();
  208. }
  209. //////统计直方图//////
  210. void CShowDIBView::OnHistogram() 
  211. {
  212. // TODO: Add your command handler code here
  213. m_Dib.Histogram();
  214. InvalidateRect( NULL, TRUE );
  215. UpdateWindow();
  216. }
  217. /////////直方图均衡/////////
  218. void CShowDIBView::OnHistEqua() 
  219. {
  220. // TODO: Add your command handler code here
  221. m_Dib.HistEqua();
  222. InvalidateRect( NULL, TRUE );
  223. UpdateWindow();
  224. }
  225. ////////平移变换////////
  226. void CShowDIBView::OnGeomTran() 
  227. {
  228. // TODO: Add your command handler code here
  229. m_Dib.GeomTrans();
  230. InvalidateRect( NULL, TRUE );
  231. UpdateWindow();
  232. }
  233. ////////缩放变换////////
  234. void CShowDIBView::OnGeomZoom() 
  235. {
  236. // TODO: Add your command handler code here
  237. m_Dib.GeomZoom();
  238. InvalidateRect( NULL, TRUE );
  239. UpdateWindow();
  240. }
  241. ////////旋转变换////////
  242. void CShowDIBView::OnGeomRota() 
  243. {
  244. // TODO: Add your command handler code here
  245. int *q=m_Dib.GeomRota();
  246. int w=q[0],h=q[1];
  247. CDC *pDC = GetWindowDC();
  248. HDC hDC = pDC->GetSafeHdc();
  249. COLORREF crColor;
  250. int x,y;
  251. for (x=0;x<w;++x)
  252. {
  253. for (y=0;y<h;++y)
  254. {
  255. crColor=RGB(q[y*w+x+2],q[y*w+x+2],q[y*w+x+2]);
  256. SetPixel(hDC,x,y,crColor);
  257. }
  258. }
  259. UpdateWindow();
  260. }
  261. /////////FFT/////////
  262. void CShowDIBView::OnFft() 
  263. {
  264. // TODO: Add your command handler code here
  265. m_Dib.FFT();
  266. InvalidateRect( NULL, TRUE );
  267. UpdateWindow();
  268. }
  269. ///////DCT/////////
  270. void CShowDIBView::OnDct() 
  271. {
  272. // TODO: Add your command handler code here
  273. m_Dib.DCT();
  274. InvalidateRect( NULL, TRUE );
  275. UpdateWindow();
  276. }
  277. ////////沃尔什变换////////
  278. void CShowDIBView::OnFreqWalh() 
  279. {
  280. // TODO: Add your command handler code here
  281. m_Dib.Walsh();
  282. InvalidateRect( NULL, TRUE );
  283. UpdateWindow();
  284. }
  285. ////////小波变换/////////
  286. void CShowDIBView::OnFreqWave() 
  287. {
  288. // TODO: Add your command handler code here
  289. m_Dib.Wavelet();
  290. InvalidateRect( NULL, TRUE );
  291. UpdateWindow();
  292. }
  293. ////////均值滤波/////////
  294. void CShowDIBView::OnENHAAverF() 
  295. {
  296. // TODO: Add your command handler code here
  297. m_Dib.EnhaAverF();
  298. InvalidateRect( NULL, TRUE );
  299. UpdateWindow();
  300. }
  301. ////////中值滤波/////////
  302. void CShowDIBView::OnENHAMidianF() 
  303. {
  304. // TODO: Add your command handler code here
  305. m_Dib.EnhaMidianF();
  306. InvalidateRect( NULL, TRUE );
  307. UpdateWindow();
  308. }
  309. /////////Sobel锐化//////////
  310. void CShowDIBView::OnEnhaSobel() 
  311. {
  312. // TODO: Add your command handler code here
  313. m_Dib.Sobel();
  314. InvalidateRect( NULL, TRUE );
  315. UpdateWindow();
  316. }
  317. /////////Laplace锐化/////////
  318. void CShowDIBView::OnEnhaLaplace() 
  319. {
  320. // TODO: Add your command handler code here
  321. m_Dib.Laplace();
  322. InvalidateRect( NULL, TRUE );
  323. UpdateWindow();
  324. }
  325. //////////添加随机噪声/////////
  326. void CShowDIBView::OnRestoreRandomnoise() 
  327. {
  328. // TODO: Add your command handler code here
  329. m_Dib.RandomNoise();
  330. InvalidateRect( NULL, TRUE );
  331. UpdateWindow();
  332. }
  333. ///////////添加椒盐噪声//////////
  334. void CShowDIBView::OnRestoreSaltnoise() 
  335. {
  336. // TODO: Add your command handler code here
  337. m_Dib.SaltNoise();
  338. InvalidateRect( NULL, TRUE );
  339. UpdateWindow();
  340. }
  341. ///////////逆滤波恢复///////////
  342. void CShowDIBView::OnRestoreInverse() 
  343. {
  344. // TODO: Add your command handler code here
  345. m_Dib.RestoreInverse();
  346. InvalidateRect( NULL, TRUE );
  347. UpdateWindow();
  348. }
  349. ///////////维纳滤波恢复////////////
  350. void CShowDIBView::OnRestoreWiener() 
  351. {
  352. // TODO: Add your command handler code here
  353. m_Dib.RestoreWiener();
  354. InvalidateRect( NULL, TRUE );
  355. UpdateWindow();
  356. }
  357. void CShowDIBView::OnRecon() 
  358. {
  359. // TODO: Add your command handler code here
  360. m_Dib.Reconstruction();
  361. InvalidateRect( NULL, TRUE );
  362. UpdateWindow();
  363. }
  364. void CShowDIBView::OnHuffman() 
  365. {
  366. // TODO: Add your command handler code here
  367. m_Dib.Huffman();
  368. InvalidateRect( NULL, TRUE );
  369. UpdateWindow();
  370. }
  371. void CShowDIBView::OnRunlength() 
  372. {
  373. // TODO: Add your command handler code here
  374. m_Dib.Runlength();
  375. InvalidateRect( NULL, TRUE );
  376. UpdateWindow();
  377. }
  378. void CShowDIBView::OnAlgorith() 
  379. {
  380. // TODO: Add your command handler code here
  381. m_Dib.Algorithem();
  382. InvalidateRect( NULL, TRUE );
  383. UpdateWindow();
  384. }
  385. void CShowDIBView::OnLzw() 
  386. {
  387. // TODO: Add your command handler code here
  388. m_Dib.LZW();
  389. InvalidateRect( NULL, TRUE );
  390. UpdateWindow();
  391. }
  392. void CShowDIBView::OnJpeg() 
  393. {
  394. // TODO: Add your command handler code here
  395. m_Dib.JPEG();
  396. InvalidateRect( NULL, TRUE );
  397. UpdateWindow();
  398. }