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.  
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CDynSplitView2
  14. IMPLEMENT_DYNCREATE(CDynSplitView2, CView)
  15. CDynSplitView2::CDynSplitView2()
  16. {state2=0;
  17. for(int i=0;i<8;i++)
  18. start[i]=0;
  19. }
  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.  // for(int i=0;i<CDib1->GetHeight();i++)
  31. // for(int j=0;j<CDib1->GetDibWidthBytes();j++)
  32. // {
  33. // *(CDibNew1->m_pData)++=*(CDib1->m_pData)++;
  34. // }
  35. memcpy(CDibNew1->m_pData,CDib1->m_pData,size);
  36. //memset(CDibNew1->m_pData,255,CDibNew1->GetWidth()*CDibNew1->GetHeight());
  37. }
  38. CPalette * CDynSplitView2::CreateBitmapPalette(FuShiYuPengZhangDib * pBitmap)
  39. {
  40. struct
  41. {
  42. WORD Version;
  43. WORD NumberOfEntries;
  44. PALETTEENTRY aEntries[256];
  45. } palette = { 0x300, 256 };
  46. LPRGBQUAD pRGBTable = pBitmap->GetRGB();
  47. UINT numberOfColors = pBitmap->GetNumberOfColors();
  48. for(UINT x=0; x<numberOfColors; ++x)
  49. {
  50. palette.aEntries[x].peRed =
  51. pRGBTable[x].rgbRed;
  52. palette.aEntries[x].peGreen =
  53. pRGBTable[x].rgbGreen;
  54. palette.aEntries[x].peBlue =
  55. pRGBTable[x].rgbBlue;
  56. palette.aEntries[x].peFlags = 0;
  57. }
  58. hPalette.CreatePalette((LPLOGPALETTE)&palette);
  59. //CPalette hPale=&hPalette;
  60. return &hPalette;
  61. }
  62. CDynSplitView2::~CDynSplitView2()
  63. {
  64. }
  65. CDSplitDoc* CDynSplitView2::GetDocument() // non-debug version is inline
  66. {
  67. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDSplitDoc)));
  68. return (CDSplitDoc*)m_pDocument;
  69. }
  70. BEGIN_MESSAGE_MAP(CDynSplitView2, CView)
  71. //{{AFX_MSG_MAP(CDynSplitView2)
  72. ON_WM_ERASEBKGND()
  73. ON_COMMAND(ID_FILESAVE, OnFilesave)
  74. ON_COMMAND(ID_Chuizhifushi, OnChuizhifushi)
  75. ON_COMMAND(ID_Shuipingfushi, OnShuipingfushi)
  76. ON_COMMAND(ID_Quanfangwei, OnQuanfangwei)
  77. ON_COMMAND(ID_Shuipingpengzhang, OnShuipingpengzhang)
  78. ON_COMMAND(ID_Chuizhipengzhang, OnChuizhipengzhang)
  79. ON_COMMAND(ID_Quanfangxiangpengzhang, OnQuanfangxiangpengzhang)
  80. ON_COMMAND(ID_Kaiqi, OnKaiqi)
  81. ON_COMMAND(ID_Bihe, OnBihe)
  82. //}}AFX_MSG_MAP
  83. END_MESSAGE_MAP()
  84. /////////////////////////////////////////////////////////////////////////////
  85. // CDynSplitView2 drawing
  86. void CDynSplitView2::OnDraw(CDC* pDC)
  87. {
  88. CDSplitDoc* pDoc = GetDocument();
  89. ASSERT_VALID(pDoc);
  90. if(!pDoc ->statedoc&&state2==1)
  91. {
  92.       int m_scale=1;
  93.         BYTE* pBitmapData = CDibNew1->GetData();
  94.         LPBITMAPINFO pBitmapInfo = CDibNew1->GetInfo();
  95.         int bitmapHeight = CDibNew1->GetHeight();
  96.         int bitmapWidth = CDibNew1->GetWidth();
  97. int scaledWidth = (int)(bitmapWidth * m_scale);
  98. int scaledHeight = (int)(bitmapHeight * m_scale);
  99. if (CDibNew1->GetRGB()) // Has a color table
  100. {
  101.    CPalette * hPalette=CreateBitmapPalette(CDibNew1);
  102.             CPalette * hOldPalette =
  103.                 pDC->SelectPalette(hPalette, true);
  104.             pDC->RealizePalette();
  105. ::StretchDIBits(pDC->GetSafeHdc(),0,0,scaledWidth,scaledHeight,
  106.                0,0,bitmapWidth,bitmapHeight,
  107. pBitmapData,pBitmapInfo,
  108. DIB_RGB_COLORS, SRCCOPY);
  109.             pDC->SelectPalette(hOldPalette, true);
  110.             ::DeleteObject(hPalette);
  111. }
  112. else
  113. {
  114.             StretchDIBits(pDC->GetSafeHdc(),
  115.                 0, 0, scaledWidth, scaledHeight,
  116.                 0, 0, bitmapWidth, bitmapHeight,
  117. pBitmapData, pBitmapInfo,
  118. DIB_RGB_COLORS, SRCCOPY);
  119. }
  120. }
  121. }
  122. /////////////////////////////////////////////////////////////////////////////
  123. // CDynSplitView2 diagnostics
  124. #ifdef _DEBUG
  125. void CDynSplitView2::AssertValid() const
  126. {
  127. CView::AssertValid();
  128. }
  129. void CDynSplitView2::Dump(CDumpContext& dc) const
  130. {
  131. CView::Dump(dc);
  132. }
  133. #endif //_DEBUG
  134. /////////////////////////////////////////////////////////////////////////////
  135. // CDynSplitView2 message handlers
  136. BOOL CDynSplitView2::OnEraseBkgnd(CDC* pDC) 
  137. {
  138. CRect rect;
  139. GetClientRect(&rect);
  140. pDC->FillSolidRect(&rect,::GetSysColor(COLOR_WINDOW));
  141. return TRUE;
  142. }
  143.  
  144. void CDynSplitView2::OnFilesave() 
  145. {
  146. // TODO: Add your command handler code here
  147. CFileDialog dlg(FALSE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件(*.BMP)|*.BMP|"));
  148.     if(IDOK==dlg.DoModal())
  149. CString  filename;
  150.     filename.Format ("%s",dlg.GetPathName() );    
  151.     CDibNew1->SaveFile(filename);
  152. state2=1;
  153. Invalidate();
  154. }
  155. /*垂直腐蚀消息映射*/
  156. void CDynSplitView2::OnChuizhifushi() 
  157. {
  158. // TODO: Add your command handler code here
  159. clearmem();
  160. CDibNew1->ChuiZhiFuShi();    //调用垂直腐蚀函数
  161.   Invalidate();
  162. }
  163. /*水平腐蚀消息映射*/
  164. void CDynSplitView2::OnShuipingfushi() 
  165. {
  166. //  TODO: Add your command handler code here
  167.  clearmem();
  168. CDibNew1->Shuipingfushi();             //调用水平腐蚀函数
  169.   Invalidate();
  170. }
  171. /*全方向腐蚀消息映射*/
  172. void CDynSplitView2::OnQuanfangwei() 
  173. {
  174. // TODO: Add your command handler code here
  175. clearmem();
  176. CDibNew1->Quanfangxiangfushi();             //调用全方位腐蚀函数
  177.   Invalidate();
  178. }
  179. /*水平膨胀消息映射*/
  180. void CDynSplitView2::OnShuipingpengzhang() 
  181. {
  182. // TODO: Add your command handler code here
  183.     clearmem();
  184. CDibNew1->Shuipingpengzhang();             //调用水平膨胀函数
  185.   Invalidate();
  186. }
  187. /*垂直膨胀消息映射*/
  188. void CDynSplitView2::OnChuizhipengzhang() 
  189. {
  190.  //TODO: Add your command handler code here
  191. //初始化图像数据
  192.  clearmem();
  193. CDibNew1->Chuizhipengzhang();             //调用垂直膨胀函数
  194.   Invalidate();
  195. }
  196. /*全方向膨胀消息映射*/
  197. void CDynSplitView2::OnQuanfangxiangpengzhang() 
  198. {
  199. // TODO: Add your command handler code here
  200. clearmem();
  201. CDibNew1->Quanfangxiangpengzhang();             //调用全方向膨胀函数
  202.   Invalidate();
  203. }
  204. /*开运算消息映射*/
  205. void CDynSplitView2::OnKaiqi() 
  206. {
  207. // TODO: Add your command handler code here
  208.     clearmem();
  209.     CDibNew1->Quanfangxiangfushi(); 
  210. CDibNew1->Quanfangxiangpengzhang();             //调用全方向开启函数
  211.   Invalidate();
  212. }
  213. /*闭运算消映射*/
  214. void CDynSplitView2::OnBihe() 
  215. {
  216. // TODO: Add your command handler code here
  217.     clearmem();
  218. CDibNew1->Quanfangxiangpengzhang(); 
  219.     CDibNew1->Quanfangxiangfushi();         //调用全方向开启函数
  220.   Invalidate();
  221. }