DynSplitView2.cpp
Upload User: szkelitina
Upload Date: 2022-05-21
Package Size: 6797k
Code Size: 6k
Category:

Special Effects

Development Platform:

Visual C++

  1. // DynSplitView2.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "DSplit.h"
  5. #include "DynSplitView2.h"
  6. #include "XiaoChuHeiDian.h"
  7. #include "THREETHREEJUNZHI.h"
  8. #include "NNJUNZHI.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CDynSplitView2
  16. IMPLEMENT_DYNCREATE(CDynSplitView2, CView)
  17. CDynSplitView2::CDynSplitView2()
  18. {
  19. state2=0;
  20. }
  21. void CDynSplitView2::clearmem()
  22. {
  23. CDSplitDoc* pDoc = GetDocument();
  24. ASSERT_VALID(pDoc);
  25. pDoc ->statedoc=0;
  26.     state2=1;
  27. CDibNew1=&pDoc->CDibNew;
  28.     CDib1=&pDoc->CDib;
  29. long int  size=CDib1->GetHeight()*CDib1->GetDibWidthBytes();
  30. memcpy(CDibNew1->m_pData,CDib1->m_pData,size);
  31. }
  32. CPalette * CDynSplitView2::CreateBitmapPalette(ZaoShengXiaoChuDib * pBitmap)
  33. {
  34. struct
  35. {
  36. WORD Version;
  37. WORD NumberOfEntries;
  38. PALETTEENTRY aEntries[256];
  39. } palette = { 0x300, 256 };
  40. LPRGBQUAD pRGBTable = pBitmap->GetRGB();
  41. UINT numberOfColors = pBitmap->GetNumberOfColors();
  42. for(UINT x=0; x<numberOfColors; ++x)
  43. {
  44. palette.aEntries[x].peRed =
  45. pRGBTable[x].rgbRed;
  46. palette.aEntries[x].peGreen =
  47. pRGBTable[x].rgbGreen;
  48. palette.aEntries[x].peBlue =
  49. pRGBTable[x].rgbBlue;
  50. palette.aEntries[x].peFlags = 0;
  51. }
  52. hPalette.CreatePalette((LPLOGPALETTE)&palette);
  53. //CPalette hPale=&hPalette;
  54. return &hPalette;
  55. }
  56. CDynSplitView2::~CDynSplitView2()
  57. {
  58. }
  59. CDSplitDoc* CDynSplitView2::GetDocument() // non-debug version is inline
  60. {
  61. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDSplitDoc)));
  62. return (CDSplitDoc*)m_pDocument;
  63. }
  64. BEGIN_MESSAGE_MAP(CDynSplitView2, CView)
  65. //{{AFX_MSG_MAP(CDynSplitView2)
  66. ON_WM_ERASEBKGND()
  67. ON_COMMAND(ID_FILESAVE, OnFilesave)
  68. ON_COMMAND(ID_XIAOCHUHEIDIAN, OnXiaochuheidian)
  69. ON_COMMAND(ID_33JUNZHI, On33junzhi)
  70. ON_COMMAND(ID_NNJUNZHI, OnNnjunzhi)
  71. ON_COMMAND(ID_JUBUPINGJUN, OnJubupingjun)
  72. ON_COMMAND(ID_NNZHONGZHI, OnNnzhongzhi)
  73. ON_COMMAND(ID_SHIZI, OnShizi)
  74. ON_COMMAND(ID_NNZUIDA, OnNnzuida)
  75. ON_COMMAND(ID_SUIJIZAOSHENG, OnSuijizaosheng)
  76. ON_COMMAND(ID_JIAOYANZAOSHENG, OnJiaoyanzaosheng)
  77. ON_COMMAND(ID_FANZHUAN, OnFanzhuan)
  78. ON_COMMAND(ID_CHAOXIAN, OnChaoxian)
  79. //}}AFX_MSG_MAP
  80. END_MESSAGE_MAP()
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CDynSplitView2 drawing
  83. void CDynSplitView2::OnDraw(CDC* pDC)
  84. {
  85. CDSplitDoc* pDoc = GetDocument();
  86. ASSERT_VALID(pDoc);
  87. if(!pDoc ->statedoc&&state2==1)
  88. {
  89.       int m_scale=1;
  90.         BYTE* pBitmapData = CDibNew1->GetData();
  91.         LPBITMAPINFO pBitmapInfo = CDibNew1->GetInfo();
  92.         int bitmapHeight = CDibNew1->GetHeight();
  93.         int bitmapWidth = CDibNew1->GetWidth();
  94. int scaledWidth = (int)(bitmapWidth * m_scale);
  95. int scaledHeight = (int)(bitmapHeight * m_scale);
  96. if (CDibNew1->GetRGB()) // Has a color table
  97. {
  98.    CPalette * hPalette=CreateBitmapPalette(CDibNew1);
  99.             CPalette * hOldPalette =
  100.                 pDC->SelectPalette(hPalette, true);
  101.             pDC->RealizePalette();
  102. ::StretchDIBits(pDC->GetSafeHdc(),0,0,scaledWidth,scaledHeight,
  103.                0,0,bitmapWidth,bitmapHeight,
  104. pBitmapData,pBitmapInfo,
  105. DIB_RGB_COLORS, SRCCOPY);
  106.             pDC->SelectPalette(hOldPalette, true);
  107.             ::DeleteObject(hPalette);
  108. }
  109. else
  110. {
  111.             StretchDIBits(pDC->GetSafeHdc(),
  112.                 0, 0, scaledWidth, scaledHeight,
  113.                 0, 0, bitmapWidth, bitmapHeight,
  114. pBitmapData, pBitmapInfo,
  115. DIB_RGB_COLORS, SRCCOPY);
  116. }
  117. }
  118. }
  119. /////////////////////////////////////////////////////////////////////////////
  120. // CDynSplitView2 diagnostics
  121. #ifdef _DEBUG
  122. void CDynSplitView2::AssertValid() const
  123. {
  124. CView::AssertValid();
  125. }
  126. void CDynSplitView2::Dump(CDumpContext& dc) const
  127. {
  128. CView::Dump(dc);
  129. }
  130. #endif //_DEBUG
  131. /////////////////////////////////////////////////////////////////////////////
  132. // CDynSplitView2 message handlers
  133. BOOL CDynSplitView2::OnEraseBkgnd(CDC* pDC) 
  134. {
  135. CRect rect;
  136. GetClientRect(&rect);
  137. pDC->FillSolidRect(&rect,::GetSysColor(COLOR_WINDOW));
  138. return TRUE;
  139. }
  140. void CDynSplitView2::OnFilesave() 
  141. {
  142. CFileDialog dlg(FALSE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件(*.BMP)|*.BMP|"));
  143.     if(IDOK==dlg.DoModal())
  144. CString  filename;
  145.     filename.Format ("%s",dlg.GetPathName() );    
  146.     CDibNew1->SaveFile(filename);
  147. state2=1;
  148. Invalidate();
  149. }
  150. void CDynSplitView2::OnFanzhuan() //二值图像的黑白点噪
  151. {
  152. clearmem();
  153.   CDibNew1->HeiBaiFanZhuan();//二值图像的黑白点噪
  154. Invalidate();
  155. }
  156. void CDynSplitView2::OnXiaochuheidian() 
  157. {
  158. clearmem();
  159.     XiaoChuHeiDian dlg;
  160.     if(IDOK==dlg.DoModal())
  161. {
  162. int connec=dlg.n;
  163.     CDibNew1->black(connec);//消除图像的孤立黑点
  164. Invalidate();
  165. }
  166. }
  167. void CDynSplitView2::On33junzhi() 
  168. {
  169. clearmem();
  170.   CDibNew1->threethree();//对图像进行3*3均值滤波
  171. Invalidate();
  172. }
  173. void CDynSplitView2::OnChaoxian() 
  174. {
  175. clearmem();
  176.     THREETHREEJUNZHI dlg;
  177.     if(IDOK==dlg.DoModal())
  178. {
  179. int t=dlg.m_T;
  180.     CDibNew1->Chaoxian(t);//超限邻域平均法
  181. Invalidate();
  182. }
  183. }
  184. void CDynSplitView2::OnNnjunzhi() 
  185. {
  186. clearmem();
  187.     NNJUNZHI dlg;
  188.     if(IDOK==dlg.DoModal())
  189.     {
  190. CDibNew1->nn(dlg.m_n);//对图像进行n*n均值滤波
  191. Invalidate();
  192. }
  193. }
  194. void CDynSplitView2::OnJubupingjun() 
  195. {
  196. clearmem();
  197.     CDibNew1->jubupingjun();//对图像进行有选择局部平均化
  198. Invalidate();
  199. }
  200. void CDynSplitView2::OnNnzhongzhi() 
  201. {
  202. clearmem();
  203.     NNJUNZHI dlg;
  204.     if(IDOK==dlg.DoModal())
  205.     {
  206. CDibNew1->nnzhong(dlg.m_n);//对图像进行N*N中值滤波
  207. Invalidate();
  208. }
  209. }
  210. void CDynSplitView2::OnShizi() 
  211. {
  212. clearmem();
  213.     NNJUNZHI dlg;
  214.     if(IDOK==dlg.DoModal())
  215.     {
  216. CDibNew1->shizi(dlg.m_n);//对图像进行十字型中值滤波
  217. Invalidate();
  218. }
  219. }
  220. void CDynSplitView2::OnNnzuida() 
  221. {
  222. clearmem();
  223.     NNJUNZHI dlg;
  224.     if(IDOK==dlg.DoModal())
  225.     {
  226. CDibNew1->nnzuida(dlg.m_n);//对图像进行N*N最大滤波
  227. Invalidate();
  228. }
  229. }
  230. void CDynSplitView2::OnSuijizaosheng() 
  231. {
  232. clearmem();
  233.     CDibNew1->suijizaosheng();//对图像产生随机噪声
  234. Invalidate();
  235. }
  236. void CDynSplitView2::OnJiaoyanzaosheng() 
  237. {
  238. clearmem();
  239.     CDibNew1->jiaoyanzaosheng();//对图像产生椒盐噪声
  240. Invalidate();
  241. }