ImageProDlg.cpp
上传用户:lrt512
上传日期:2007-01-12
资源大小:709k
文件大小:31k
源码类别:

图形图象

开发平台:

Visual C++

  1. // ImageProDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ImagePro.h"
  5. #include "ImageProDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAboutDlg dialog used for App About
  13. class CAboutDlg : public CDialog
  14. {
  15. public:
  16. CAboutDlg();
  17. // Dialog Data
  18. //{{AFX_DATA(CAboutDlg)
  19. enum { IDD = IDD_ABOUTBOX };
  20. //}}AFX_DATA
  21. // ClassWizard generated virtual function overrides
  22. //{{AFX_VIRTUAL(CAboutDlg)
  23. protected:
  24. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  25. //}}AFX_VIRTUAL
  26. // Implementation
  27. protected:
  28. //{{AFX_MSG(CAboutDlg)
  29. //}}AFX_MSG
  30. DECLARE_MESSAGE_MAP()
  31. };
  32. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  33. {
  34. //{{AFX_DATA_INIT(CAboutDlg)
  35. //}}AFX_DATA_INIT
  36. }
  37. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. //{{AFX_DATA_MAP(CAboutDlg)
  41. //}}AFX_DATA_MAP
  42. }
  43. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  44. //{{AFX_MSG_MAP(CAboutDlg)
  45. //}}AFX_MSG_MAP
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CImageProDlg dialog
  49. CImageProDlg::CImageProDlg(CWnd* pParent /*=NULL*/)
  50. : CDialog(CImageProDlg::IDD, pParent)
  51. {
  52. //{{AFX_DATA_INIT(CImageProDlg)
  53. //}}AFX_DATA_INIT
  54. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  55. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  56. }
  57. void CImageProDlg::DoDataExchange(CDataExchange* pDX)
  58. {
  59. CDialog::DoDataExchange(pDX);
  60. //{{AFX_DATA_MAP(CImageProDlg)
  61. DDX_Control(pDX, IDC_PARA1LAB, m_Label_Para);
  62. DDX_Control(pDX, IDC_COMBO_Dest, m_COM_DEST);
  63. DDX_Control(pDX, IDC_COMBO_Sour, m_COM_SOUR);
  64. DDX_Control(pDX, IDC_SLI_ALPHA, m_Sli_Alpha);
  65. DDX_Control(pDX, IDC_EDIT_SL, m_Edit_SL);
  66. DDX_Control(pDX, IDC_EDIT_SH, m_Edit_SH);
  67. DDX_Control(pDX, IDC_EDIT_DL, m_Edit_DL);
  68. DDX_Control(pDX, IDC_EDIT_DH, m_Edit_DH);
  69. DDX_Control(pDX, IDC_EDIT_ALPHA, m_Edit_Alpha);
  70. DDX_Control(pDX, IDC_COM_MODECHOICE, m_Com_ModeChoice);
  71. DDX_Control(pDX, IDC_BUT_GO, m_But_Go);
  72. //}}AFX_DATA_MAP
  73. }
  74. BEGIN_MESSAGE_MAP(CImageProDlg, CDialog)
  75. //{{AFX_MSG_MAP(CImageProDlg)
  76. ON_WM_SYSCOMMAND()
  77. ON_WM_PAINT()
  78. ON_WM_QUERYDRAGICON()
  79. ON_COMMAND(ID_FILE_BMP1, OnFileBmp1)
  80. ON_COMMAND(ID_FILE_BMP2, OnFileBmp2)
  81. ON_COMMAND(ID_FILE_BMP3, OnFileBmp3)
  82. ON_COMMAND(ID_FILE_BMP4, OnFileBmp4)
  83. ON_COMMAND(ID_FILE_BMP5, OnFileBmp5)
  84. ON_COMMAND(ID_FILE_BMP6, OnFileBmp6)
  85. ON_COMMAND(ID_FILE_BMP7, OnFileBmp7)
  86. ON_COMMAND(ID_FILE_BMP8, OnFileBmp8)
  87. ON_COMMAND(ID_FILE_BMP9, OnFileBmp9)
  88. ON_COMMAND(ID_DIP_Histogram, OnDIPHistogram)
  89. ON_COMMAND(ID_DIP_LinearChange, OnDIPLinearChange)
  90. ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  91. ON_BN_CLICKED(IDC_BUT_GO, OnButGo)
  92. ON_WM_HSCROLL()
  93. ON_COMMAND(ID_DIP_Sharp, OnDIPSharp)
  94. ON_CBN_SELCHANGE(IDC_COMBO_Sour, OnSelchangeCOMBOSour)
  95. ON_CBN_SELCHANGE(IDC_COMBO_Dest, OnSelchangeCOMBODest)
  96. ON_CBN_SELCHANGE(IDC_COM_MODECHOICE, OnSelchangeComModechoice)
  97. ON_COMMAND(ID_DIP_Smooth, OnDIPSmooth)
  98. ON_COMMAND(ID_DIP_ImageDiv, OnDIPImageDiv)
  99. ON_COMMAND(ID_DIP_SpuColor, OnDIPSpuColor)
  100. ON_COMMAND(ID_DIP_MidFilter, OnDIPMidFilter)
  101. ON_COMMAND(ID_FILE_BMP10, OnFileBmp10)
  102. //}}AFX_MSG_MAP
  103. END_MESSAGE_MAP()
  104. /////////////////////////////////////////////////////////////////////////////
  105. // CImageProDlg message handlers
  106. BOOL CImageProDlg::OnInitDialog()
  107. {
  108. CDialog::OnInitDialog();
  109. // Add "About..." menu item to system menu.
  110. // IDM_ABOUTBOX must be in the system command range.
  111. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  112. ASSERT(IDM_ABOUTBOX < 0xF000);
  113. CMenu* pSysMenu = GetSystemMenu(FALSE);
  114. if (pSysMenu != NULL)
  115. {
  116. CString strAboutMenu;
  117. strAboutMenu.LoadString(IDS_ABOUTBOX);
  118. if (!strAboutMenu.IsEmpty())
  119. {
  120. pSysMenu->AppendMenu(MF_SEPARATOR);
  121. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  122. }
  123. }
  124. // Set the icon for this dialog.  The framework does this automatically
  125. //  when the application's main window is not a dialog
  126. SetIcon(m_hIcon, TRUE); // Set big icon
  127. SetIcon(m_hIcon, FALSE); // Set small icon
  128. // TODO: Add extra initialization here
  129. CImageProDlg::SetWindowText("数字图像处理");
  130. m_Edit_SL.SetWindowText("100");
  131. m_Edit_SH.SetWindowText("200");
  132. m_Edit_DL.SetWindowText("0");
  133. m_Edit_DH.SetWindowText("255");
  134. m_Edit_Alpha.SetWindowText("0.05");
  135. m_Edit_SL.EnableWindow(false);
  136. m_Edit_SH.EnableWindow(false);
  137. m_Edit_DL.EnableWindow(false);
  138. m_Edit_DH.EnableWindow(false);
  139. m_Edit_Alpha.EnableWindow(false);
  140. m_Com_ModeChoice.EnableWindow(false);
  141. m_Sli_Alpha.EnableWindow(false);
  142. m_Sli_Alpha.SetRange(5,100);
  143. AlphaA=100.0;
  144. m_COM_SOUR.ResetContent();
  145. m_COM_DEST.ResetContent();
  146. m_COM_SOUR.AddString("1");
  147. m_COM_SOUR.AddString("2");
  148. m_COM_SOUR.AddString("3");
  149. m_COM_SOUR.AddString("4");
  150. m_COM_DEST.AddString("2");
  151. m_COM_DEST.AddString("3");
  152. m_COM_DEST.AddString("4");
  153. m_COM_SOUR.EnableWindow(false);
  154. m_COM_DEST.EnableWindow(false);
  155. m_But_Go.EnableWindow(false);
  156. SetArea(2);
  157. return TRUE;  // return TRUE  unless you set the focus to a control
  158. }
  159. void CImageProDlg::OnSysCommand(UINT nID, LPARAM lParam)
  160. {
  161. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  162. {
  163. CAboutDlg dlgAbout;
  164. dlgAbout.DoModal();
  165. }
  166. else
  167. {
  168. CDialog::OnSysCommand(nID, lParam);
  169. }
  170. }
  171. // If you add a minimize button to your dialog, you will need the code below
  172. //  to draw the icon.  For MFC applications using the document/view model,
  173. //  this is automatically done for you by the framework.
  174. void CImageProDlg::OnPaint() 
  175. {
  176. if (IsIconic())
  177. {
  178. CPaintDC dc(this); // device context for painting
  179. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  180. // Center icon in client rectangle
  181. int cxIcon = GetSystemMetrics(SM_CXICON);
  182. int cyIcon = GetSystemMetrics(SM_CYICON);
  183. CRect rect;
  184. GetClientRect(&rect);
  185. int x = (rect.Width() - cxIcon + 1) / 2;
  186. int y = (rect.Height() - cyIcon + 1) / 2;
  187. // Draw the icon
  188. dc.DrawIcon(x, y, m_hIcon);
  189. }
  190. else
  191. {
  192. CDialog::OnPaint();
  193. }
  194. }
  195. // The system calls this to obtain the cursor to display while the user drags
  196. //  the minimized window.
  197. HCURSOR CImageProDlg::OnQueryDragIcon()
  198. {
  199. return (HCURSOR) m_hIcon;
  200. }
  201. //below funcations are added out of OnDraw()
  202. void CImageProDlg::OnFileBmp1() 
  203. {
  204. // TODO: Add your command handler code here
  205. RePaintRect(0);
  206. HBMP=IDB_BITMAP1;
  207. DispBMP(HBMP);
  208. }
  209. void CImageProDlg::OnFileBmp2() 
  210. {
  211. // TODO: Add your command handler code here
  212. RePaintRect(0);
  213. HBMP=IDB_BITMAP2;
  214. DispBMP(HBMP);
  215. }
  216. void CImageProDlg::OnFileBmp3() 
  217. {
  218. // TODO: Add your command handler code here
  219. RePaintRect(0);
  220. HBMP=IDB_BITMAP3;
  221. DispBMP(HBMP);
  222. }
  223. void CImageProDlg::OnFileBmp4() 
  224. {
  225. // TODO: Add your command handler code here
  226. RePaintRect(0);
  227. HBMP=IDB_BITMAP4;
  228. DispBMP(HBMP);
  229. }
  230. void CImageProDlg::OnFileBmp5() 
  231. {
  232. // TODO: Add your command handler code here
  233. RePaintRect(0);
  234. HBMP=IDB_BITMAP5;
  235. DispBMP(HBMP);
  236. }
  237. void CImageProDlg::OnFileBmp6() 
  238. {
  239. // TODO: Add your command handler code here
  240. RePaintRect(0);
  241. HBMP=IDB_BITMAP6;
  242. DispBMP(HBMP);
  243. }
  244. void CImageProDlg::OnFileBmp7() 
  245. {
  246. // TODO: Add your command handler code here
  247. RePaintRect(0);
  248. HBMP=IDB_BITMAP7;
  249. DispBMP(HBMP);
  250. }
  251. void CImageProDlg::OnFileBmp8() 
  252. {
  253. // TODO: Add your command handler code here
  254. RePaintRect(0);
  255. HBMP=IDB_BITMAP8;
  256. DispBMP(HBMP);
  257. }
  258. void CImageProDlg::OnFileBmp9() 
  259. {
  260. // TODO: Add your command handler code here
  261. RePaintRect(0);
  262. HBMP=IDB_BITMAP9;
  263. DispBMP(HBMP);
  264. }
  265. void CImageProDlg::OnFileBmp10() 
  266. {
  267. // TODO: Add your command handler code here
  268. RePaintRect(0);
  269. HBMP=IDB_BITMAP10;
  270. DispBMP(HBMP);
  271. }
  272. void CImageProDlg::OnAppAbout() 
  273. {
  274. // TODO: Add your command handler code here
  275. CAboutDlg aboutDlg;
  276. aboutDlg.DoModal();
  277. }
  278. void CImageProDlg::OnButGo() 
  279. {
  280. // TODO: Add your control notification handler code here
  281. switch (LastOp){
  282. case 1:
  283. HistogramA() ;
  284. break;
  285. case 2:
  286. LinearChangeA() ;
  287. break;
  288. case 3:
  289. SharpA();
  290. break;
  291. case 4:
  292. SmoothA();
  293. break;
  294. case 5:
  295. SpuColorA();
  296. break;
  297. case 6:
  298. MidFilterA();
  299. break;
  300. case 7:
  301. ImageDivA();
  302. break;
  303. default:
  304. break;
  305. }
  306. }
  307. void CImageProDlg::OnSelchangeCOMBOSour() 
  308. {
  309. // TODO: Add your control notification handler code here
  310. switch(m_COM_SOUR.GetCurSel()){
  311. case 0:
  312. CurAreaTop=11;
  313. CurAreaLeft=11;
  314. break;
  315. case 1:
  316. CurAreaTop=11;
  317. CurAreaLeft=351;
  318. break;
  319. case 2:
  320. CurAreaTop=231;
  321. CurAreaLeft=11;
  322. break;
  323. case 3:
  324. CurAreaTop=231;
  325. CurAreaLeft=351;
  326. break;
  327. default:;
  328. }
  329. }
  330. void CImageProDlg::OnSelchangeCOMBODest() 
  331. {
  332. // TODO: Add your control notification handler code here
  333. SetArea(m_COM_DEST.GetCurSel()+2);
  334. }
  335. void CImageProDlg::OnSelchangeComModechoice() 
  336. {
  337. // TODO: Add your control notification handler code here
  338. iMode=m_Com_ModeChoice.GetCurSel()+1;
  339. }
  340. void CImageProDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  341. {
  342. // TODO: Add your message handler code here and/or call default
  343. CString s;
  344. s.Format("%f", ( (double) m_Sli_Alpha.GetPos()/AlphaA ) );
  345. m_Edit_Alpha.SetWindowText(s);
  346. CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  347. }
  348. void CImageProDlg::OnDIPHistogram() 
  349. {
  350. // TODO: Add your command handler code here
  351. CImageProDlg::SetWindowText("数字图像处理    直方图统计");
  352. m_Com_ModeChoice.ResetContent();
  353. m_Com_ModeChoice.EnableWindow(false);
  354. m_Sli_Alpha.EnableWindow(false);
  355. m_Label_Para.SetWindowText("");
  356. m_COM_DEST.EnableWindow(true);
  357. m_COM_SOUR.EnableWindow(true);
  358. m_Edit_SL.EnableWindow(false);
  359. m_Edit_SH.EnableWindow(false);
  360. m_Edit_DL.EnableWindow(false);
  361. m_Edit_DH.EnableWindow(false);
  362. m_But_Go.EnableWindow(true);
  363. iMode=-1;
  364. LastOp=1;
  365. }
  366. void CImageProDlg::OnDIPLinearChange() 
  367. {
  368. // TODO: Add your command handler code here
  369. CImageProDlg::SetWindowText("数字图像处理    线性变换");
  370. m_Com_ModeChoice.ResetContent();
  371. m_Com_ModeChoice.EnableWindow(false);
  372. m_Sli_Alpha.EnableWindow(false);
  373. m_Label_Para.SetWindowText("");
  374. m_COM_DEST.EnableWindow(true);
  375. m_COM_SOUR.EnableWindow(true);
  376. m_Edit_SL.EnableWindow(true);
  377. m_Edit_SH.EnableWindow(true);
  378. m_Edit_DL.EnableWindow(true);
  379. m_Edit_DH.EnableWindow(true);
  380. m_But_Go.EnableWindow(true);
  381. iMode=-1;
  382. LastOp=2;
  383. }
  384. void CImageProDlg::OnDIPSharp() 
  385. {
  386. // TODO: Add your command handler code here
  387. CImageProDlg::SetWindowText("数字图像处理    锐化");
  388. m_Com_ModeChoice.ResetContent();
  389. m_Com_ModeChoice.AddString("四方向模板");
  390. m_Com_ModeChoice.AddString("八方向模板");
  391. m_Com_ModeChoice.EnableWindow(true);
  392. m_Com_ModeChoice.UpdateWindow();
  393. m_Sli_Alpha.SetRange(5,100);
  394. m_Sli_Alpha.SetPos(5);
  395. m_Edit_Alpha.SetWindowText("0.050");
  396. AlphaA=100.0;
  397. m_Sli_Alpha.EnableWindow(true);
  398. m_Label_Para.SetWindowText("Alpha");
  399. m_COM_DEST.EnableWindow(true);
  400. m_COM_SOUR.EnableWindow(true);
  401. m_Edit_SL.EnableWindow(false);
  402. m_Edit_SH.EnableWindow(false);
  403. m_Edit_DL.EnableWindow(false);
  404. m_Edit_DH.EnableWindow(false);
  405. m_But_Go.EnableWindow(true);
  406. iMode=-1;
  407. LastOp=3;
  408. }
  409. void CImageProDlg::OnDIPSmooth() 
  410. {
  411. // TODO: Add your command handler code here
  412. CImageProDlg::SetWindowText("数字图像处理    平滑");
  413. m_Com_ModeChoice.ResetContent();
  414. m_Com_ModeChoice.AddString("四方向模板");
  415. m_Com_ModeChoice.AddString("八方向模板");
  416. m_Com_ModeChoice.EnableWindow(true);
  417. m_Com_ModeChoice.UpdateWindow();
  418. m_Sli_Alpha.SetRange(5,100);
  419. m_Sli_Alpha.SetPos(5);
  420. m_Edit_Alpha.SetWindowText("0.050");
  421. AlphaA=100.0;
  422. m_Sli_Alpha.EnableWindow(true);
  423. m_Label_Para.SetWindowText("Alpha");
  424. m_COM_DEST.EnableWindow(true);
  425. m_COM_SOUR.EnableWindow(true);
  426. m_Edit_SL.EnableWindow(false);
  427. m_Edit_SH.EnableWindow(false);
  428. m_Edit_DL.EnableWindow(false);
  429. m_Edit_DH.EnableWindow(false);
  430. m_But_Go.EnableWindow(true);
  431. iMode=-1;
  432. LastOp=4;
  433. }
  434. void CImageProDlg::OnDIPSpuColor() 
  435. {
  436. // TODO: Add your command handler code here
  437. CImageProDlg::SetWindowText("数字图像处理    伪彩色变换");
  438. m_Com_ModeChoice.ResetContent();
  439. m_Com_ModeChoice.AddString("线性变换");
  440. m_Com_ModeChoice.AddString("非线性变换");
  441. m_Com_ModeChoice.EnableWindow(true);
  442. m_Com_ModeChoice.UpdateWindow();
  443. m_Sli_Alpha.SetRange(10,50);
  444. m_Sli_Alpha.SetPos(1);
  445. m_Edit_Alpha.SetWindowText("0.010");
  446. AlphaA=1000.0;
  447. m_Sli_Alpha.EnableWindow(true);
  448. m_Label_Para.SetWindowText("非线性因子");
  449. m_COM_DEST.EnableWindow(true);
  450. m_COM_SOUR.EnableWindow(true);
  451. m_Edit_SL.EnableWindow(false);
  452. m_Edit_SH.EnableWindow(false);
  453. m_Edit_DL.EnableWindow(false);
  454. m_Edit_DH.EnableWindow(false);
  455. m_But_Go.EnableWindow(true);
  456. iMode=-1;
  457. LastOp=5;
  458. }
  459. void CImageProDlg::OnDIPMidFilter() 
  460. {
  461. // TODO: Add your command handler code here
  462. CImageProDlg::SetWindowText("数字图像处理    中值滤波");
  463. m_Com_ModeChoice.ResetContent();
  464. m_Com_ModeChoice.AddString("1X3模板");
  465. m_Com_ModeChoice.AddString("1X5模板");
  466. m_Com_ModeChoice.AddString("3X1模板");
  467. m_Com_ModeChoice.AddString("5X1模板");
  468. m_Com_ModeChoice.AddString("3X3十字模板");
  469. m_Com_ModeChoice.AddString("5X5十字模板");
  470. m_Com_ModeChoice.AddString("3X3模板");
  471. m_Com_ModeChoice.EnableWindow(true);
  472. m_Com_ModeChoice.UpdateWindow();
  473. m_Sli_Alpha.SetRange(5,100);
  474. m_Sli_Alpha.SetPos(5);
  475. m_Edit_Alpha.SetWindowText("0.050");
  476. AlphaA=100.0;
  477. m_Sli_Alpha.EnableWindow(false);
  478. m_Label_Para.SetWindowText("");
  479. m_COM_DEST.EnableWindow(true);
  480. m_COM_SOUR.EnableWindow(true);
  481. m_Edit_SL.EnableWindow(false);
  482. m_Edit_SH.EnableWindow(false);
  483. m_Edit_DL.EnableWindow(false);
  484. m_Edit_DH.EnableWindow(false);
  485. m_But_Go.EnableWindow(true);
  486. iMode=-1;
  487. LastOp=6;
  488. }
  489. void CImageProDlg::OnDIPImageDiv() 
  490. {
  491. // TODO: Add your command handler code here
  492. CImageProDlg::SetWindowText("数字图像处理    伪彩色变换");
  493. m_Com_ModeChoice.ResetContent();
  494. m_Com_ModeChoice.AddString("二值门限分割");
  495. m_Com_ModeChoice.AddString("非二值门限分割1");
  496. m_Com_ModeChoice.AddString("非二值门限分割2");
  497. m_Com_ModeChoice.AddString("梯度模板");
  498. m_Com_ModeChoice.AddString("Roberts梯度模板");
  499. m_Com_ModeChoice.EnableWindow(true);
  500. m_Com_ModeChoice.UpdateWindow();
  501. m_Sli_Alpha.SetRange(0,255);
  502. m_Sli_Alpha.SetPos(0);
  503. m_Edit_Alpha.SetWindowText("0.000");
  504. AlphaA=1.0;
  505. m_Sli_Alpha.EnableWindow(true);
  506. m_Label_Para.SetWindowText("门限");
  507. m_COM_DEST.EnableWindow(true);
  508. m_COM_SOUR.EnableWindow(true);
  509. m_Edit_SL.EnableWindow(false);
  510. m_Edit_SH.EnableWindow(false);
  511. m_Edit_DL.EnableWindow(false);
  512. m_Edit_DH.EnableWindow(false);
  513. m_But_Go.EnableWindow(true);
  514. iMode=-1;
  515. LastOp=7;
  516. }
  517. void CImageProDlg::SetArea(int area)
  518. {
  519. PreArea=area;
  520. if (area==0){
  521. outTop=1;
  522. outLeft=1;
  523. outRight=679;
  524. outBottom=439;}
  525. else if (area==1){
  526. outLeft=11;
  527. outTop=11;
  528. outRight=330;
  529. outBottom=210;}
  530. else if (area==2){
  531. outLeft=351;
  532. outTop=11;
  533. outRight=670;
  534. outBottom=210;}
  535. else if (area==3){
  536. outLeft=11;
  537. outTop=231;
  538. outRight=330;
  539. outBottom=430;}
  540. else if (area==4){
  541. outLeft=351;
  542. outTop=231;
  543. outRight=670;
  544. outBottom=430;}
  545. }
  546. void CImageProDlg::RePaintRect(int Area)
  547. {
  548. int c=PreArea;
  549. CDC * pDC=GetDC();
  550. CPen penWhite(PS_SOLID,1,RGB(255,255,255));
  551. CPen *pOldPen=NULL;
  552. pOldPen=pDC->SelectObject (&penWhite);
  553. CBrush brWhite(RGB(255,255,255));
  554. CBrush *pOldBrush=NULL;
  555. pOldBrush=pDC->SelectObject (&brWhite);
  556. SetArea(Area);
  557. pDC->Rectangle (outLeft-1,outTop-1,outRight+1,outBottom+1);
  558. pDC->SelectObject (pOldBrush);
  559. pDC->SelectObject (pOldPen);
  560. SetArea(c);
  561. }
  562. void CImageProDlg::DispBMP(int HBMP)
  563. {
  564. int c=PreArea;
  565. SetArea(1);
  566. BITMAP Bmp;
  567. int  Width,Height;
  568. CDC *DispMemDC=new CDC;
  569. CBitmap *pBitmap=new CBitmap;
  570.     CClientDC dc(this);
  571.     pBitmap->LoadBitmap(HBMP);
  572. DispMemDC->CreateCompatibleDC(&dc);
  573.     DispMemDC->SelectObject(pBitmap);
  574. pBitmap->GetObject(sizeof(Bmp),&Bmp);
  575. Width=Bmp.bmWidth;
  576. Height=Bmp.bmHeight;
  577. pBitmap->GetObject(sizeof(Bmp),&Bmp);
  578. dc.BitBlt(outLeft,outTop,Width,Height,DispMemDC,0,0,SRCCOPY);
  579. delete(DispMemDC);
  580. delete(pBitmap);
  581. SetArea(c);
  582. }
  583. void CImageProDlg::Drawline(int x1,int y1,int x2,int y2)
  584. {
  585. CDC * pDC=GetDC();
  586. CPen penBlack(PS_SOLID,1,RGB(0,0,0));
  587. CPen *pOldPen=NULL;
  588. pOldPen=pDC->SelectObject (&penBlack);
  589. pDC->MoveTo(x1,y1);
  590. pDC->LineTo(x2,y2);
  591. pDC->SelectObject (pOldPen);
  592. pDC=NULL;
  593. }
  594. CImageProDlg::ReadPixel(int x,int y)
  595. {   CClientDC dc(this);
  596. return(dc.GetPixel(x,y) & 0xff);
  597. }
  598. void CImageProDlg::WritePixel(int x,int y,int c)
  599. {   COLORREF color;
  600. color=0xff & c;
  601.     color=(color<<16) | (color<<8) | color;  
  602.     CClientDC dc(this);
  603. dc.SetPixelV(x,y,color);
  604. }
  605. void CImageProDlg::WritePixelEX(int x,int y,int c)
  606. {   COLORREF color=(COLORREF) c;
  607.     CClientDC dc(this);
  608. dc.SetPixelV(x,y,color);
  609. }
  610. void CImageProDlg::WritePixelA(int x, int y, int graycolor)
  611. {
  612.     COLORREF color;
  613. color=0xff & graycolor;
  614.     color=(color<<16) | (color<<8) | color;  
  615.     CClientDC dc(this);
  616. dc.SetPixelV(x+outLeft,y+outTop,color);
  617. }
  618. void CImageProDlg::HistogramA()
  619. {
  620. m_But_Go.EnableWindow(true);
  621.     CClientDC dc(this);
  622. RePaintRect(PreArea);
  623. int iNumOfPixel=320*200;
  624. double dPixelData[255];
  625. int temp=0;
  626. for (int i=0;i<256;i++)
  627. dPixelData[i]=0;
  628. for (int yd=CurAreaTop;yd<=CurAreaTop+199;yd++){
  629. for (int xd=CurAreaLeft;xd<=CurAreaLeft+319;xd++){
  630. temp=dc.GetPixel(xd,yd) & 0xff;
  631. dPixelData[temp]=dPixelData[temp]+1.0;}}
  632. double maxtemp=0;
  633. for (i=0;i<256;i++){
  634. if (dPixelData[i]>maxtemp)   maxtemp=dPixelData[i];}
  635. for (i=0;i<256;i++){
  636. dPixelData[i]/=maxtemp;}
  637. int iHInfo=outBottom-outTop,iXS=outLeft,iYT=0;
  638. for (i=0;i<256;i++){
  639. iYT=(int) ((outBottom) - ((int) (iHInfo * dPixelData[i]))) ;
  640. Drawline(iXS,outBottom,iXS,iYT);
  641. iXS++;}
  642. m_But_Go.EnableWindow(true);
  643. }
  644. void CImageProDlg::LinearChangeA()
  645. {
  646. m_But_Go.EnableWindow(false);
  647.     CClientDC dc(this);
  648. RePaintRect(PreArea);
  649. int gray[255];
  650. CString temp;
  651. m_Edit_SL.GetWindowText(temp);
  652. int sourLow=_ttoi(temp);
  653. m_Edit_SH.GetWindowText(temp);
  654. int sourHigh=_ttoi(temp);
  655. m_Edit_DL.GetWindowText(temp);
  656. int DesLow=_ttoi(temp);
  657. m_Edit_DH.GetWindowText(temp);
  658. int DesHigh=_ttoi(temp);
  659. for (int i=0;i<256;i++){
  660. gray[i]=LinearChangeEX(sourLow,sourHigh,DesLow,DesHigh,i);
  661. }
  662. int graytemp=0;
  663. for (int yd=0;yd<=199;yd++){
  664. for (int xd=0;xd<=319;xd++){
  665. graytemp=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  666. WritePixelA(xd,yd,gray[graytemp]);
  667. }
  668. }
  669. m_But_Go.EnableWindow(true);
  670. }
  671. int CImageProDlg::LinearChangeEX(int SouLow, int SouHigh, int DestLow, int DestHigh, int value)
  672. {
  673. double c=(double) (DestHigh-DestLow)/(SouHigh-SouLow);
  674. int max=(DestHigh>DestLow)?DestHigh:DestLow;
  675. int min=DestHigh + DestLow - max;
  676. int res=(int) ((value-SouLow)*c+DestLow);
  677. if (res>max) res=max;
  678. if (res<min) res=min;
  679. return res;
  680. }
  681. void CImageProDlg::SharpA()
  682. {
  683. m_But_Go.EnableWindow(false);
  684.     CClientDC dc(this);
  685. int graytemp=0;
  686. int graytempA=0;
  687. double c=((double) m_Sli_Alpha.GetPos()/100.0);
  688. if (iMode==1)  {               //四方向模板
  689. RePaintRect(PreArea);
  690. for (int yd=CurAreaTop+1;yd<=CurAreaTop+198;yd++){
  691. for (int xd=CurAreaLeft+1;xd<=CurAreaLeft+318;xd++){
  692. graytempA=dc.GetPixel(xd-1,yd) & 0xff;
  693. graytempA+=dc.GetPixel(xd+1,yd) & 0xff;
  694. graytempA+=dc.GetPixel(xd,yd-1) & 0xff;
  695. graytempA+=dc.GetPixel(xd,yd+1) & 0xff;
  696. graytemp=dc.GetPixel(xd,yd) & 0xff;
  697. graytemp=(int) ((1.0+4.0*c)*((double)graytemp)-c*((double)graytempA));
  698. if (graytemp<0) graytemp=0;
  699. if (graytemp>255) graytemp=255;
  700. WritePixel(xd+outLeft-CurAreaLeft,yd+outTop-CurAreaTop,graytemp);
  701. }
  702. }
  703. }
  704. else if (iMode==2)  {               //八方向模板
  705. RePaintRect(PreArea);
  706. for (int yd=CurAreaTop+1;yd<=CurAreaTop+198;yd++){
  707. for (int xd=CurAreaLeft+1;xd<=CurAreaLeft+318;xd++){
  708. graytempA=dc.GetPixel(xd-1,yd+1) & 0xff;
  709. graytempA+=dc.GetPixel(xd-1,yd) & 0xff;
  710. graytempA+=dc.GetPixel(xd-1,yd-1) & 0xff;
  711. graytempA+=dc.GetPixel(xd,yd+1) & 0xff;
  712. graytempA+=dc.GetPixel(xd,yd-1) & 0xff;
  713. graytempA+=dc.GetPixel(xd+1,yd) & 0xff;
  714. graytempA+=dc.GetPixel(xd+1,yd-1) & 0xff;
  715. graytempA+=dc.GetPixel(xd+1,yd+1) & 0xff;
  716. graytemp=dc.GetPixel(xd,yd) & 0xff;
  717. graytemp=(int) ((1.0+8.0*c)*((double)graytemp)-c*((double)graytempA));
  718. if (graytemp<0) graytemp=0;
  719. if (graytemp>255) graytemp=255;
  720. WritePixel(xd+outLeft-CurAreaLeft,yd+outTop-CurAreaTop,graytemp);
  721. }
  722. }
  723. }
  724. else 
  725. MessageBox("请选择一种模板","Warning",MB_ICONHAND);
  726. m_But_Go.EnableWindow(true);
  727. }
  728. void CImageProDlg::SmoothA()
  729. {
  730. m_But_Go.EnableWindow(false);
  731.     CClientDC dc(this);
  732. int graytemp=0;
  733. int graytempA=0;
  734. double c=((double) m_Sli_Alpha.GetPos()/100.0);
  735. if (iMode==1)  {               //四方向模板
  736. RePaintRect(PreArea);
  737. for (int yd=CurAreaTop+1;yd<=CurAreaTop+198;yd++){
  738. for (int xd=CurAreaLeft+1;xd<=CurAreaLeft+318;xd++){
  739. graytempA=dc.GetPixel(xd-1,yd) & 0xff;
  740. graytempA+=dc.GetPixel(xd+1,yd) & 0xff;
  741. graytempA+=dc.GetPixel(xd,yd-1) & 0xff;
  742. graytempA+=dc.GetPixel(xd,yd+1) & 0xff;
  743. graytemp=dc.GetPixel(xd,yd) & 0xff;
  744. graytemp=(int) ((1.0-4.0*c)*((double)graytemp)+c*((double)graytempA));
  745. if (graytemp<0) graytemp=0;
  746. if (graytemp>255) graytemp=255;
  747. WritePixel(xd+outLeft-CurAreaLeft,yd+outTop-CurAreaTop,graytemp);
  748. }
  749. }
  750. }
  751. else if (iMode==2)  {               //八方向模板
  752. RePaintRect(PreArea);
  753. for (int yd=CurAreaTop+1;yd<=CurAreaTop+198;yd++){
  754. for (int xd=CurAreaLeft+1;xd<=CurAreaLeft+318;xd++){
  755. graytempA=dc.GetPixel(xd-1,yd+1) & 0xff;
  756. graytempA+=dc.GetPixel(xd-1,yd) & 0xff;
  757. graytempA+=dc.GetPixel(xd-1,yd-1) & 0xff;
  758. graytempA+=dc.GetPixel(xd,yd+1) & 0xff;
  759. graytempA+=dc.GetPixel(xd,yd-1) & 0xff;
  760. graytempA+=dc.GetPixel(xd+1,yd) & 0xff;
  761. graytempA+=dc.GetPixel(xd+1,yd-1) & 0xff;
  762. graytempA+=dc.GetPixel(xd+1,yd+1) & 0xff;
  763. graytemp=dc.GetPixel(xd,yd) & 0xff;
  764. graytemp=(int) ((1.0-8.0*c)*((double)graytemp)+c*((double)graytempA));
  765. if (graytemp<0) graytemp=0;
  766. if (graytemp>255) graytemp=255;
  767. WritePixel(xd+outLeft-CurAreaLeft,yd+outTop-CurAreaTop,graytemp);
  768. }
  769. }
  770. }
  771. else 
  772. MessageBox("请选择一种模板","Warning",MB_ICONHAND);
  773. m_But_Go.EnableWindow(true);
  774. }
  775. void CImageProDlg::SpuColorA()
  776. {
  777. m_But_Go.EnableWindow(false);
  778. CClientDC dc(this);
  779. int redgray[255],greengray[255],bluegray[255];
  780. if (iMode==1){
  781. RePaintRect(PreArea);
  782. for (int i=0;i<256;i++){
  783. redgray[i]=LinearChangeEX(128,192,0,255,i);
  784. bluegray[i]=LinearChangeEX(64,127,255,0,i);
  785. if (i<64)
  786. greengray[i]=LinearChangeEX(0,63,0,255,i);
  787. else if (i>190)
  788. greengray[i]=LinearChangeEX(191,250,255,0,i);
  789. else
  790. greengray[i]=255;
  791. }
  792. }
  793. else if (iMode==2){
  794. RePaintRect(PreArea);
  795. double c=((double) m_Sli_Alpha.GetPos())/AlphaA;
  796. for (int i=0;i<256;i++){
  797. redgray[i]=greengray[i]=bluegray[i]=0;
  798. redgray[i]=(int) (255.0-c*((double)i-175.0)*((double)i-175.0));
  799. if (redgray[i]<0) redgray[i]=0;
  800. if (redgray[i]>255) redgray[i]=255;
  801. greengray[i]=(int) (255.0-c*((double)i-80.0)*((double)i-80.0));
  802. if (greengray[i]<0) greengray[i]=0;
  803. if (greengray[i]>255) greengray[i]=255;
  804. if (i<=127){
  805. bluegray[i]=(int) (255.0-c*((double)i)*((double)i));
  806. if (greengray[i]<0) greengray[i]=0;
  807. if (greengray[i]>255) greengray[i]=255;}
  808. if (i>127){
  809. bluegray[i]=(int) (255.0-c*((double)i-255.0)*((double)i-255.0));
  810. if (greengray[i]<0) greengray[i]=0;
  811. if (greengray[i]>255) greengray[i]=255;}
  812. }
  813. }
  814. else 
  815. {MessageBox("请选择一种模板","Warning",MB_ICONHAND);
  816. m_But_Go.EnableWindow(true);
  817. return;}
  818. int temp=0;
  819. for (int yd=0;yd<=199;yd++){
  820. for (int xd=0;xd<=319;xd++){
  821. temp=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  822. WritePixelEX(xd+outLeft,yd+outTop,RGB(redgray[temp],greengray[temp],bluegray[temp]));}}
  823. /*
  824. for (int xd=0;xd<=255;xd++){
  825. for (int yd=0;yd<=40;yd++){
  826. WritePixelEX(xd+outLeft,yd+outTop,RGB(redgray[xd],0,0));}
  827. for (yd=50;yd<=90;yd++){
  828. WritePixelEX(xd+outLeft,yd+outTop,RGB(0,greengray[xd],0));}
  829. for (yd=100;yd<=140;yd++){
  830. WritePixelEX(xd+outLeft,yd+outTop,RGB(0,0,bluegray[xd]));}
  831. for (yd=150;yd<=190;yd++){
  832. WritePixel(xd+outLeft,yd+outTop,xd);}
  833. for (yd=200;yd<=240;yd++){
  834. WritePixelEX(xd+outLeft,yd+outTop,RGB(redgray[xd],greengray[xd],bluegray[xd]));}
  835. }
  836. */
  837. m_But_Go.EnableWindow(true);
  838. }
  839. void CImageProDlg::MidFilterA()
  840. {
  841. m_But_Go.EnableWindow(false);
  842. CClientDC dc(this);
  843. int graytemp[9],temp=0;
  844. for (int is=0;is<=9;is++)
  845. graytemp[is]=0;
  846. if (iMode==1) { //1X3模板
  847. RePaintRect(PreArea);
  848. for (int yd=0;yd<=199;yd++){
  849. for (int xd=1;xd<=318;xd++){
  850. graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  851. graytemp[1]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
  852. graytemp[2]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop) & 0xff;
  853. WritePixelA(xd,yd,midSortEX(graytemp,3));
  854. }
  855. }
  856. }
  857. else if (iMode==2) { //1X5模板
  858. RePaintRect(PreArea);
  859. for (int yd=0;yd<=199;yd++){
  860. for (int xd=2;xd<=317;xd++){
  861. graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  862. graytemp[1]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
  863. graytemp[2]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop) & 0xff;
  864. graytemp[4]=dc.GetPixel(xd+CurAreaLeft-2,yd+CurAreaTop) & 0xff;
  865. graytemp[5]=dc.GetPixel(xd+CurAreaLeft+2,yd+CurAreaTop) & 0xff;
  866. WritePixelA(xd,yd,midSortEX(graytemp,5));
  867. }
  868. }
  869. }
  870. else if (iMode==3) { //3X1模板
  871. RePaintRect(PreArea);
  872. for (int yd=1;yd<=198;yd++){
  873. for (int xd=0;xd<=319;xd++){
  874. graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  875. graytemp[1]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
  876. graytemp[2]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+1) & 0xff;
  877. WritePixelA(xd,yd,midSortEX(graytemp,3));
  878. }
  879. }
  880. }
  881. else if (iMode==4) { //5X1模板
  882. RePaintRect(PreArea);
  883. for (int yd=2;yd<=197;yd++){
  884. for (int xd=0;xd<=319;xd++){
  885. graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  886. graytemp[1]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
  887. graytemp[2]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+1) & 0xff;
  888. graytemp[4]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-2) & 0xff;
  889. graytemp[5]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+2) & 0xff;
  890. WritePixelA(xd,yd,midSortEX(graytemp,5));
  891. }
  892. }
  893. }
  894. else if (iMode==5) { //3X3十字模板
  895. RePaintRect(PreArea);
  896. for (int yd=1;yd<=198;yd++){
  897. for (int xd=1;xd<=318;xd++){
  898. graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  899. graytemp[1]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
  900. graytemp[2]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop) & 0xff;
  901. graytemp[4]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
  902. graytemp[5]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+1) & 0xff;
  903. WritePixelA(xd,yd,midSortEX(graytemp,5));
  904. }
  905. }
  906. }
  907. else if (iMode==6) { //5X5十字模板
  908. RePaintRect(PreArea);
  909. for (int yd=1;yd<=198;yd++){
  910. for (int xd=1;xd<=318;xd++){
  911. graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  912. graytemp[1]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
  913. graytemp[2]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop) & 0xff;
  914. graytemp[3]=dc.GetPixel(xd+CurAreaLeft-2,yd+CurAreaTop) & 0xff;
  915. graytemp[4]=dc.GetPixel(xd+CurAreaLeft+2,yd+CurAreaTop) & 0xff;
  916. graytemp[5]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
  917. graytemp[6]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+1) & 0xff;
  918. graytemp[7]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-2) & 0xff;
  919. graytemp[8]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+2) & 0xff;
  920. WritePixelA(xd,yd,midSortEX(graytemp,5));
  921. }
  922. }
  923. }
  924. else if (iMode==7) { //3X3模板
  925. RePaintRect(PreArea);
  926. for (int yd=1;yd<=198;yd++){
  927. for (int xd=1;xd<=318;xd++){
  928. graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  929. graytemp[1]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop-1) & 0xff;
  930. graytemp[2]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
  931. graytemp[3]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop+1) & 0xff;
  932. graytemp[4]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
  933. graytemp[5]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+1) & 0xff;
  934. graytemp[6]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop-1) & 0xff;
  935. graytemp[7]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop) & 0xff;
  936. graytemp[8]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop+1) & 0xff;
  937. WritePixelA(xd,yd,midSortEX(graytemp,9));
  938. }
  939. }
  940. }
  941. else 
  942. MessageBox("请选择一种模板","Warning",MB_ICONHAND);
  943. m_But_Go.EnableWindow(true);
  944. }
  945. int CImageProDlg::midSortEX(int arr[],int num)
  946. {
  947. int maxnum=0,maxpos=0;
  948. for (int i=0;i<=((num-1)/2);i++){
  949. maxnum=arr[i];
  950. maxpos=i;
  951. for (int s=i;s<num;s++)
  952. if (arr[s]>=maxnum){
  953. maxnum=arr[s];
  954. maxpos=s;}
  955. arr[maxpos]=arr[i];
  956. arr[i]=maxnum;
  957. }
  958. return arr[((num-1)/2)];
  959. }
  960. void CImageProDlg::ImageDivA()
  961. {
  962. m_But_Go.EnableWindow(false);
  963. CClientDC dc(this);
  964. int temp=0;
  965. if (iMode==1) { //二值门限
  966. RePaintRect(PreArea);
  967. int c=m_Sli_Alpha.GetPos();
  968. for (int yd=0;yd<=199;yd++){
  969. for (int xd=0;xd<=319;xd++){
  970. temp=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  971. if (temp>c) temp=255;
  972. else temp =0;
  973. WritePixelA(xd,yd,temp);
  974. }
  975. }
  976. }
  977. else if (iMode==2) { //非二值门限1
  978. RePaintRect(PreArea);
  979. int c=m_Sli_Alpha.GetPos();
  980. for (int yd=0;yd<=199;yd++){
  981. for (int xd=0;xd<=319;xd++){
  982. temp=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  983. if (temp>c) temp=255;
  984. WritePixelA(xd,yd,temp);
  985. }
  986. }
  987. }
  988. else if (iMode==3) { //非二值门限2
  989. RePaintRect(PreArea);
  990. int c=m_Sli_Alpha.GetPos();
  991. for (int yd=0;yd<=199;yd++){
  992. for (int xd=0;xd<=319;xd++){
  993. temp=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  994. if (temp<c) temp=255;
  995. WritePixelA(xd,yd,temp);
  996. }
  997. }
  998. }
  999. else if (iMode==4) { //梯度模板
  1000. RePaintRect(PreArea);
  1001. int temp1,temp2,delta1,delta2,c=m_Sli_Alpha.GetPos();
  1002. for (int yd=1;yd<=199;yd++){
  1003. for (int xd=1;xd<=319;xd++){
  1004. temp1=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  1005. temp2=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
  1006. delta1=abs(temp1-temp2);
  1007. temp1=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  1008. temp2=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
  1009. delta2=abs(temp1-temp2);
  1010. temp=( ((delta1>delta2)?delta1:delta2)>=c) ? 0:255;
  1011. WritePixelA(xd,yd,temp);
  1012. }
  1013. }
  1014. }
  1015. else if (iMode==5) { //Roberts梯度模板
  1016. RePaintRect(PreArea);
  1017. int temp1,temp2,delta1,delta2,c=m_Sli_Alpha.GetPos();
  1018. for (int yd=1;yd<=199;yd++){
  1019. for (int xd=1;xd<=319;xd++){
  1020. temp1=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
  1021. temp2=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop-1) & 0xff;
  1022. delta1=abs(temp1-temp2);
  1023. temp1=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
  1024. temp2=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
  1025. delta2=abs(temp1-temp2);
  1026. temp=( ((delta1>delta2)?delta1:delta2)>=c) ? 0:255;
  1027. WritePixelA(xd,yd,temp);
  1028. }
  1029. }
  1030. }
  1031. else 
  1032. MessageBox("请选择一种模板","Warning",MB_ICONHAND);
  1033. m_But_Go.EnableWindow(true);
  1034. }