Dynsplitview2.cpp
Upload User: szkelitina
Upload Date: 2022-05-21
Package Size: 6797k
Code Size: 5k
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. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CDynSplitView2
  13. IMPLEMENT_DYNCREATE(CDynSplitView2, CView)
  14. CDynSplitView2::CDynSplitView2()
  15. {
  16. state2=0;
  17. }
  18. /*初始化图像数据*/
  19. void CDynSplitView2::clearmem()
  20. {
  21. CDSplitDoc* pDoc = GetDocument();
  22. ASSERT_VALID(pDoc);
  23. pDoc->statedoc=0;
  24.     state2=1;
  25. CDibNew1=&pDoc->CDibNew;
  26.     CDib1=&pDoc->CDib;
  27. long int  size=CDib1->GetHeight()*CDib1->GetDibWidthBytes();
  28. memcpy(CDibNew1->m_pData,CDib1->m_pData,size);
  29. }
  30. CPalette * CDynSplitView2::CreateBitmapPalette(WeiFenDib * pBitmap)
  31. {
  32. struct
  33. {
  34. WORD Version;
  35. WORD NumberOfEntries;
  36. PALETTEENTRY aEntries[256];
  37. } palette = { 0x300, 256 };
  38. LPRGBQUAD pRGBTable = pBitmap->GetRGB();
  39. UINT numberOfColors = pBitmap->GetNumberOfColors();
  40. for(UINT x=0; x<numberOfColors; ++x)
  41. {
  42. palette.aEntries[x].peRed =
  43. pRGBTable[x].rgbRed;
  44. palette.aEntries[x].peGreen =
  45. pRGBTable[x].rgbGreen;
  46. palette.aEntries[x].peBlue =
  47. pRGBTable[x].rgbBlue;
  48. palette.aEntries[x].peFlags = 0;
  49. }
  50. hPalette.CreatePalette((LPLOGPALETTE)&palette);
  51. return &hPalette;
  52. }
  53. CDynSplitView2::~CDynSplitView2()
  54. {
  55. }
  56. CDSplitDoc* CDynSplitView2::GetDocument() // non-debug version is inline
  57. {
  58. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDSplitDoc)));
  59. return (CDSplitDoc*)m_pDocument;
  60. }
  61. BEGIN_MESSAGE_MAP(CDynSplitView2, CView)
  62. //{{AFX_MSG_MAP(CDynSplitView2)
  63. ON_WM_ERASEBKGND()
  64. ON_COMMAND(ID_FILESAVE, OnFilesave)
  65. ON_COMMAND(ID_HengXiang, OnHengXiang)
  66. ON_COMMAND(ID_ZongXiang, OnZongXiang)
  67. ON_COMMAND(ID_ShuangXiang, OnShuangXiang)
  68. ON_COMMAND(ID_ErCi1, OnErCi1)
  69. ON_COMMAND(ID_ErCi2, OnErCi2)
  70. ON_COMMAND(ID_ErCi3, OnErCi3)
  71. //}}AFX_MSG_MAP
  72. END_MESSAGE_MAP()
  73. /////////////////////////////////////////////////////////////////////////////
  74. // CDynSplitView2 drawing
  75. void CDynSplitView2::OnDraw(CDC* pDC)
  76. {
  77. CDSplitDoc* pDoc = GetDocument();
  78. ASSERT_VALID(pDoc);
  79. if(!pDoc ->statedoc&&state2==1)
  80. {
  81.         BYTE* pBitmapData = CDibNew1->GetData();
  82.         LPBITMAPINFO pBitmapInfo = CDibNew1->GetInfo();
  83.         int bitmapHeight = CDibNew1->GetHeight();
  84.         int bitmapWidth = CDibNew1->GetWidth();
  85. if (CDibNew1->GetRGB()) // Has a color table
  86. {
  87. CPalette * hPalette=CreateBitmapPalette(CDibNew1);
  88.             CPalette * hOldPalette =
  89.                 pDC->SelectPalette(hPalette, true);
  90.             pDC->RealizePalette();
  91. ::StretchDIBits(pDC->GetSafeHdc(),0, 0, bitmapWidth, bitmapHeight,
  92. 0, 0, bitmapWidth, bitmapHeight,
  93. pBitmapData, pBitmapInfo,
  94. DIB_RGB_COLORS, SRCCOPY);
  95.             pDC->SelectPalette(hOldPalette, true);
  96.             ::DeleteObject(hPalette);
  97. }
  98.         else
  99. {
  100.             StretchDIBits(pDC->GetSafeHdc(),
  101.                 0, 0, bitmapWidth, bitmapHeight,
  102.                 0, 0, bitmapWidth, bitmapHeight,
  103. pBitmapData, pBitmapInfo,
  104. DIB_RGB_COLORS, SRCCOPY);
  105. }
  106. }
  107. }
  108. /////////////////////////////////////////////////////////////////////////////
  109. // CDynSplitView2 diagnostics
  110. #ifdef _DEBUG
  111. void CDynSplitView2::AssertValid() const
  112. {
  113. CView::AssertValid();
  114. }
  115. void CDynSplitView2::Dump(CDumpContext& dc) const
  116. {
  117. CView::Dump(dc);
  118. }
  119. #endif //_DEBUG
  120. /////////////////////////////////////////////////////////////////////////////
  121. // CDynSplitView2 message handlers
  122. BOOL CDynSplitView2::OnEraseBkgnd(CDC* pDC) 
  123. {
  124. CRect rect;
  125. GetClientRect(&rect);
  126. pDC->FillSolidRect(&rect,::GetSysColor(COLOR_WINDOW));
  127. return TRUE;
  128. }
  129. void CDynSplitView2::OnFilesave() 
  130. {
  131. CFileDialog dlg(FALSE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件(*.BMP)|*.BMP|"));
  132.     if(IDOK==dlg.DoModal())
  133. CString  filename;
  134.     filename.Format ("%s",dlg.GetPathName() );    
  135.     CDibNew1->SaveFile(filename);
  136. state2=1;
  137. Invalidate();
  138. }
  139. /*横向微分消息映射*/
  140. void CDynSplitView2::OnHengXiang() 
  141. {
  142. clearmem();
  143. CDibNew1->HengXiang();      //对图像进行横向微分
  144. Invalidate();
  145. }
  146. /*纵向微分消息映射*/
  147. void CDynSplitView2::OnZongXiang() 
  148. {
  149. clearmem();
  150.     CDibNew1->ZongXiang();//对图像进行纵向微分
  151. Invalidate();
  152. }
  153. /*双向一次微分消息映射*/
  154. void CDynSplitView2::OnShuangXiang() 
  155. {
  156. clearmem();
  157.     CDibNew1->ShuangXiang();     //对图像进行双向一次微分
  158. Invalidate();
  159. }
  160. /*二次微分1消息映射*/
  161. void CDynSplitView2::OnErCi1() 
  162. {
  163. clearmem();
  164.     CDibNew1->ErCi1();     //对图像进行二次微分
  165. Invalidate();
  166. }
  167. /*二次微分2消息映射*/
  168. void CDynSplitView2::OnErCi2() 
  169. {
  170. clearmem();
  171.     CDibNew1->ErCi2();     //对图像进行二次微分
  172. Invalidate();
  173. }
  174. /*二次微分3消息映射*/
  175. void CDynSplitView2::OnErCi3() 
  176. {
  177. clearmem();
  178.     CDibNew1->ErCi3();     //对图像进行二次微分
  179. Invalidate();
  180. }