ImageProDlg.cpp
上传用户:lrt512
上传日期:2007-01-12
资源大小:709k
文件大小:31k
- // ImageProDlg.cpp : implementation file
- //
- #include "stdafx.h"
- #include "ImagePro.h"
- #include "ImageProDlg.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CAboutDlg dialog used for App About
- class CAboutDlg : public CDialog
- {
- public:
- CAboutDlg();
- // Dialog Data
- //{{AFX_DATA(CAboutDlg)
- enum { IDD = IDD_ABOUTBOX };
- //}}AFX_DATA
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CAboutDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
- // Implementation
- protected:
- //{{AFX_MSG(CAboutDlg)
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- {
- //{{AFX_DATA_INIT(CAboutDlg)
- //}}AFX_DATA_INIT
- }
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAboutDlg)
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- //{{AFX_MSG_MAP(CAboutDlg)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CImageProDlg dialog
- CImageProDlg::CImageProDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CImageProDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CImageProDlg)
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- }
- void CImageProDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CImageProDlg)
- DDX_Control(pDX, IDC_PARA1LAB, m_Label_Para);
- DDX_Control(pDX, IDC_COMBO_Dest, m_COM_DEST);
- DDX_Control(pDX, IDC_COMBO_Sour, m_COM_SOUR);
- DDX_Control(pDX, IDC_SLI_ALPHA, m_Sli_Alpha);
- DDX_Control(pDX, IDC_EDIT_SL, m_Edit_SL);
- DDX_Control(pDX, IDC_EDIT_SH, m_Edit_SH);
- DDX_Control(pDX, IDC_EDIT_DL, m_Edit_DL);
- DDX_Control(pDX, IDC_EDIT_DH, m_Edit_DH);
- DDX_Control(pDX, IDC_EDIT_ALPHA, m_Edit_Alpha);
- DDX_Control(pDX, IDC_COM_MODECHOICE, m_Com_ModeChoice);
- DDX_Control(pDX, IDC_BUT_GO, m_But_Go);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CImageProDlg, CDialog)
- //{{AFX_MSG_MAP(CImageProDlg)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_COMMAND(ID_FILE_BMP1, OnFileBmp1)
- ON_COMMAND(ID_FILE_BMP2, OnFileBmp2)
- ON_COMMAND(ID_FILE_BMP3, OnFileBmp3)
- ON_COMMAND(ID_FILE_BMP4, OnFileBmp4)
- ON_COMMAND(ID_FILE_BMP5, OnFileBmp5)
- ON_COMMAND(ID_FILE_BMP6, OnFileBmp6)
- ON_COMMAND(ID_FILE_BMP7, OnFileBmp7)
- ON_COMMAND(ID_FILE_BMP8, OnFileBmp8)
- ON_COMMAND(ID_FILE_BMP9, OnFileBmp9)
- ON_COMMAND(ID_DIP_Histogram, OnDIPHistogram)
- ON_COMMAND(ID_DIP_LinearChange, OnDIPLinearChange)
- ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
- ON_BN_CLICKED(IDC_BUT_GO, OnButGo)
- ON_WM_HSCROLL()
- ON_COMMAND(ID_DIP_Sharp, OnDIPSharp)
- ON_CBN_SELCHANGE(IDC_COMBO_Sour, OnSelchangeCOMBOSour)
- ON_CBN_SELCHANGE(IDC_COMBO_Dest, OnSelchangeCOMBODest)
- ON_CBN_SELCHANGE(IDC_COM_MODECHOICE, OnSelchangeComModechoice)
- ON_COMMAND(ID_DIP_Smooth, OnDIPSmooth)
- ON_COMMAND(ID_DIP_ImageDiv, OnDIPImageDiv)
- ON_COMMAND(ID_DIP_SpuColor, OnDIPSpuColor)
- ON_COMMAND(ID_DIP_MidFilter, OnDIPMidFilter)
- ON_COMMAND(ID_FILE_BMP10, OnFileBmp10)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CImageProDlg message handlers
- BOOL CImageProDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // Add "About..." menu item to system menu.
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
-
- // TODO: Add extra initialization here
- CImageProDlg::SetWindowText("数字图像处理");
- m_Edit_SL.SetWindowText("100");
- m_Edit_SH.SetWindowText("200");
- m_Edit_DL.SetWindowText("0");
- m_Edit_DH.SetWindowText("255");
- m_Edit_Alpha.SetWindowText("0.05");
- m_Edit_SL.EnableWindow(false);
- m_Edit_SH.EnableWindow(false);
- m_Edit_DL.EnableWindow(false);
- m_Edit_DH.EnableWindow(false);
- m_Edit_Alpha.EnableWindow(false);
- m_Com_ModeChoice.EnableWindow(false);
- m_Sli_Alpha.EnableWindow(false);
- m_Sli_Alpha.SetRange(5,100);
- AlphaA=100.0;
- m_COM_SOUR.ResetContent();
- m_COM_DEST.ResetContent();
- m_COM_SOUR.AddString("1");
- m_COM_SOUR.AddString("2");
- m_COM_SOUR.AddString("3");
- m_COM_SOUR.AddString("4");
- m_COM_DEST.AddString("2");
- m_COM_DEST.AddString("3");
- m_COM_DEST.AddString("4");
- m_COM_SOUR.EnableWindow(false);
- m_COM_DEST.EnableWindow(false);
-
- m_But_Go.EnableWindow(false);
-
- SetArea(2);
- return TRUE; // return TRUE unless you set the focus to a control
- }
- void CImageProDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
- void CImageProDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- // The system calls this to obtain the cursor to display while the user drags
- // the minimized window.
- HCURSOR CImageProDlg::OnQueryDragIcon()
- {
- return (HCURSOR) m_hIcon;
- }
- //below funcations are added out of OnDraw()
- void CImageProDlg::OnFileBmp1()
- {
- // TODO: Add your command handler code here
- RePaintRect(0);
- HBMP=IDB_BITMAP1;
- DispBMP(HBMP);
-
- }
- void CImageProDlg::OnFileBmp2()
- {
- // TODO: Add your command handler code here
- RePaintRect(0);
- HBMP=IDB_BITMAP2;
- DispBMP(HBMP);
-
- }
- void CImageProDlg::OnFileBmp3()
- {
- // TODO: Add your command handler code here
- RePaintRect(0);
- HBMP=IDB_BITMAP3;
- DispBMP(HBMP);
- }
- void CImageProDlg::OnFileBmp4()
- {
- // TODO: Add your command handler code here
- RePaintRect(0);
- HBMP=IDB_BITMAP4;
- DispBMP(HBMP);
-
- }
- void CImageProDlg::OnFileBmp5()
- {
- // TODO: Add your command handler code here
- RePaintRect(0);
- HBMP=IDB_BITMAP5;
- DispBMP(HBMP);
-
- }
- void CImageProDlg::OnFileBmp6()
- {
- // TODO: Add your command handler code here
- RePaintRect(0);
- HBMP=IDB_BITMAP6;
- DispBMP(HBMP);
-
- }
- void CImageProDlg::OnFileBmp7()
- {
- // TODO: Add your command handler code here
- RePaintRect(0);
- HBMP=IDB_BITMAP7;
- DispBMP(HBMP);
-
- }
- void CImageProDlg::OnFileBmp8()
- {
- // TODO: Add your command handler code here
- RePaintRect(0);
- HBMP=IDB_BITMAP8;
- DispBMP(HBMP);
-
- }
- void CImageProDlg::OnFileBmp9()
- {
- // TODO: Add your command handler code here
- RePaintRect(0);
- HBMP=IDB_BITMAP9;
- DispBMP(HBMP);
-
- }
- void CImageProDlg::OnFileBmp10()
- {
- // TODO: Add your command handler code here
- RePaintRect(0);
- HBMP=IDB_BITMAP10;
- DispBMP(HBMP);
- }
- void CImageProDlg::OnAppAbout()
- {
- // TODO: Add your command handler code here
- CAboutDlg aboutDlg;
- aboutDlg.DoModal();
- }
- void CImageProDlg::OnButGo()
- {
- // TODO: Add your control notification handler code here
- switch (LastOp){
- case 1:
- HistogramA() ;
- break;
- case 2:
- LinearChangeA() ;
- break;
- case 3:
- SharpA();
- break;
- case 4:
- SmoothA();
- break;
- case 5:
- SpuColorA();
- break;
- case 6:
- MidFilterA();
- break;
- case 7:
- ImageDivA();
- break;
- default:
- break;
- }
- }
- void CImageProDlg::OnSelchangeCOMBOSour()
- {
- // TODO: Add your control notification handler code here
- switch(m_COM_SOUR.GetCurSel()){
- case 0:
- CurAreaTop=11;
- CurAreaLeft=11;
- break;
- case 1:
- CurAreaTop=11;
- CurAreaLeft=351;
- break;
- case 2:
- CurAreaTop=231;
- CurAreaLeft=11;
- break;
- case 3:
- CurAreaTop=231;
- CurAreaLeft=351;
- break;
- default:;
- }
- }
- void CImageProDlg::OnSelchangeCOMBODest()
- {
- // TODO: Add your control notification handler code here
- SetArea(m_COM_DEST.GetCurSel()+2);
- }
- void CImageProDlg::OnSelchangeComModechoice()
- {
- // TODO: Add your control notification handler code here
- iMode=m_Com_ModeChoice.GetCurSel()+1;
- }
- void CImageProDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
- {
- // TODO: Add your message handler code here and/or call default
- CString s;
- s.Format("%f", ( (double) m_Sli_Alpha.GetPos()/AlphaA ) );
- m_Edit_Alpha.SetWindowText(s);
- CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
- }
- void CImageProDlg::OnDIPHistogram()
- {
- // TODO: Add your command handler code here
- CImageProDlg::SetWindowText("数字图像处理 直方图统计");
- m_Com_ModeChoice.ResetContent();
- m_Com_ModeChoice.EnableWindow(false);
- m_Sli_Alpha.EnableWindow(false);
- m_Label_Para.SetWindowText("");
- m_COM_DEST.EnableWindow(true);
- m_COM_SOUR.EnableWindow(true);
- m_Edit_SL.EnableWindow(false);
- m_Edit_SH.EnableWindow(false);
- m_Edit_DL.EnableWindow(false);
- m_Edit_DH.EnableWindow(false);
- m_But_Go.EnableWindow(true);
- iMode=-1;
- LastOp=1;
- }
- void CImageProDlg::OnDIPLinearChange()
- {
- // TODO: Add your command handler code here
- CImageProDlg::SetWindowText("数字图像处理 线性变换");
- m_Com_ModeChoice.ResetContent();
- m_Com_ModeChoice.EnableWindow(false);
- m_Sli_Alpha.EnableWindow(false);
- m_Label_Para.SetWindowText("");
- m_COM_DEST.EnableWindow(true);
- m_COM_SOUR.EnableWindow(true);
- m_Edit_SL.EnableWindow(true);
- m_Edit_SH.EnableWindow(true);
- m_Edit_DL.EnableWindow(true);
- m_Edit_DH.EnableWindow(true);
- m_But_Go.EnableWindow(true);
- iMode=-1;
- LastOp=2;
- }
- void CImageProDlg::OnDIPSharp()
- {
- // TODO: Add your command handler code here
- CImageProDlg::SetWindowText("数字图像处理 锐化");
- m_Com_ModeChoice.ResetContent();
- m_Com_ModeChoice.AddString("四方向模板");
- m_Com_ModeChoice.AddString("八方向模板");
- m_Com_ModeChoice.EnableWindow(true);
- m_Com_ModeChoice.UpdateWindow();
- m_Sli_Alpha.SetRange(5,100);
- m_Sli_Alpha.SetPos(5);
- m_Edit_Alpha.SetWindowText("0.050");
- AlphaA=100.0;
- m_Sli_Alpha.EnableWindow(true);
- m_Label_Para.SetWindowText("Alpha");
- m_COM_DEST.EnableWindow(true);
- m_COM_SOUR.EnableWindow(true);
- m_Edit_SL.EnableWindow(false);
- m_Edit_SH.EnableWindow(false);
- m_Edit_DL.EnableWindow(false);
- m_Edit_DH.EnableWindow(false);
- m_But_Go.EnableWindow(true);
- iMode=-1;
- LastOp=3;
- }
- void CImageProDlg::OnDIPSmooth()
- {
- // TODO: Add your command handler code here
- CImageProDlg::SetWindowText("数字图像处理 平滑");
- m_Com_ModeChoice.ResetContent();
- m_Com_ModeChoice.AddString("四方向模板");
- m_Com_ModeChoice.AddString("八方向模板");
- m_Com_ModeChoice.EnableWindow(true);
- m_Com_ModeChoice.UpdateWindow();
- m_Sli_Alpha.SetRange(5,100);
- m_Sli_Alpha.SetPos(5);
- m_Edit_Alpha.SetWindowText("0.050");
- AlphaA=100.0;
- m_Sli_Alpha.EnableWindow(true);
- m_Label_Para.SetWindowText("Alpha");
- m_COM_DEST.EnableWindow(true);
- m_COM_SOUR.EnableWindow(true);
- m_Edit_SL.EnableWindow(false);
- m_Edit_SH.EnableWindow(false);
- m_Edit_DL.EnableWindow(false);
- m_Edit_DH.EnableWindow(false);
- m_But_Go.EnableWindow(true);
- iMode=-1;
- LastOp=4;
- }
- void CImageProDlg::OnDIPSpuColor()
- {
- // TODO: Add your command handler code here
- CImageProDlg::SetWindowText("数字图像处理 伪彩色变换");
- m_Com_ModeChoice.ResetContent();
- m_Com_ModeChoice.AddString("线性变换");
- m_Com_ModeChoice.AddString("非线性变换");
- m_Com_ModeChoice.EnableWindow(true);
- m_Com_ModeChoice.UpdateWindow();
- m_Sli_Alpha.SetRange(10,50);
- m_Sli_Alpha.SetPos(1);
- m_Edit_Alpha.SetWindowText("0.010");
- AlphaA=1000.0;
- m_Sli_Alpha.EnableWindow(true);
- m_Label_Para.SetWindowText("非线性因子");
- m_COM_DEST.EnableWindow(true);
- m_COM_SOUR.EnableWindow(true);
- m_Edit_SL.EnableWindow(false);
- m_Edit_SH.EnableWindow(false);
- m_Edit_DL.EnableWindow(false);
- m_Edit_DH.EnableWindow(false);
- m_But_Go.EnableWindow(true);
- iMode=-1;
- LastOp=5;
-
- }
- void CImageProDlg::OnDIPMidFilter()
- {
- // TODO: Add your command handler code here
- CImageProDlg::SetWindowText("数字图像处理 中值滤波");
- m_Com_ModeChoice.ResetContent();
- m_Com_ModeChoice.AddString("1X3模板");
- m_Com_ModeChoice.AddString("1X5模板");
- m_Com_ModeChoice.AddString("3X1模板");
- m_Com_ModeChoice.AddString("5X1模板");
- m_Com_ModeChoice.AddString("3X3十字模板");
- m_Com_ModeChoice.AddString("5X5十字模板");
- m_Com_ModeChoice.AddString("3X3模板");
- m_Com_ModeChoice.EnableWindow(true);
- m_Com_ModeChoice.UpdateWindow();
- m_Sli_Alpha.SetRange(5,100);
- m_Sli_Alpha.SetPos(5);
- m_Edit_Alpha.SetWindowText("0.050");
- AlphaA=100.0;
- m_Sli_Alpha.EnableWindow(false);
- m_Label_Para.SetWindowText("");
- m_COM_DEST.EnableWindow(true);
- m_COM_SOUR.EnableWindow(true);
- m_Edit_SL.EnableWindow(false);
- m_Edit_SH.EnableWindow(false);
- m_Edit_DL.EnableWindow(false);
- m_Edit_DH.EnableWindow(false);
- m_But_Go.EnableWindow(true);
- iMode=-1;
- LastOp=6;
-
- }
- void CImageProDlg::OnDIPImageDiv()
- {
- // TODO: Add your command handler code here
- CImageProDlg::SetWindowText("数字图像处理 伪彩色变换");
- m_Com_ModeChoice.ResetContent();
- m_Com_ModeChoice.AddString("二值门限分割");
- m_Com_ModeChoice.AddString("非二值门限分割1");
- m_Com_ModeChoice.AddString("非二值门限分割2");
- m_Com_ModeChoice.AddString("梯度模板");
- m_Com_ModeChoice.AddString("Roberts梯度模板");
- m_Com_ModeChoice.EnableWindow(true);
- m_Com_ModeChoice.UpdateWindow();
- m_Sli_Alpha.SetRange(0,255);
- m_Sli_Alpha.SetPos(0);
- m_Edit_Alpha.SetWindowText("0.000");
- AlphaA=1.0;
- m_Sli_Alpha.EnableWindow(true);
- m_Label_Para.SetWindowText("门限");
- m_COM_DEST.EnableWindow(true);
- m_COM_SOUR.EnableWindow(true);
- m_Edit_SL.EnableWindow(false);
- m_Edit_SH.EnableWindow(false);
- m_Edit_DL.EnableWindow(false);
- m_Edit_DH.EnableWindow(false);
- m_But_Go.EnableWindow(true);
- iMode=-1;
- LastOp=7;
- }
- void CImageProDlg::SetArea(int area)
- {
- PreArea=area;
- if (area==0){
- outTop=1;
- outLeft=1;
- outRight=679;
- outBottom=439;}
- else if (area==1){
- outLeft=11;
- outTop=11;
- outRight=330;
- outBottom=210;}
- else if (area==2){
- outLeft=351;
- outTop=11;
- outRight=670;
- outBottom=210;}
- else if (area==3){
- outLeft=11;
- outTop=231;
- outRight=330;
- outBottom=430;}
- else if (area==4){
- outLeft=351;
- outTop=231;
- outRight=670;
- outBottom=430;}
- }
- void CImageProDlg::RePaintRect(int Area)
- {
- int c=PreArea;
- CDC * pDC=GetDC();
- CPen penWhite(PS_SOLID,1,RGB(255,255,255));
- CPen *pOldPen=NULL;
- pOldPen=pDC->SelectObject (&penWhite);
- CBrush brWhite(RGB(255,255,255));
- CBrush *pOldBrush=NULL;
- pOldBrush=pDC->SelectObject (&brWhite);
-
- SetArea(Area);
-
- pDC->Rectangle (outLeft-1,outTop-1,outRight+1,outBottom+1);
-
- pDC->SelectObject (pOldBrush);
- pDC->SelectObject (pOldPen);
- SetArea(c);
-
- }
- void CImageProDlg::DispBMP(int HBMP)
- {
- int c=PreArea;
- SetArea(1);
- BITMAP Bmp;
- int Width,Height;
- CDC *DispMemDC=new CDC;
- CBitmap *pBitmap=new CBitmap;
- CClientDC dc(this);
- pBitmap->LoadBitmap(HBMP);
- DispMemDC->CreateCompatibleDC(&dc);
- DispMemDC->SelectObject(pBitmap);
- pBitmap->GetObject(sizeof(Bmp),&Bmp);
- Width=Bmp.bmWidth;
- Height=Bmp.bmHeight;
- pBitmap->GetObject(sizeof(Bmp),&Bmp);
- dc.BitBlt(outLeft,outTop,Width,Height,DispMemDC,0,0,SRCCOPY);
- delete(DispMemDC);
- delete(pBitmap);
- SetArea(c);
- }
- void CImageProDlg::Drawline(int x1,int y1,int x2,int y2)
- {
- CDC * pDC=GetDC();
- CPen penBlack(PS_SOLID,1,RGB(0,0,0));
- CPen *pOldPen=NULL;
- pOldPen=pDC->SelectObject (&penBlack);
- pDC->MoveTo(x1,y1);
- pDC->LineTo(x2,y2);
- pDC->SelectObject (pOldPen);
- pDC=NULL;
- }
- CImageProDlg::ReadPixel(int x,int y)
- { CClientDC dc(this);
- return(dc.GetPixel(x,y) & 0xff);
- }
- void CImageProDlg::WritePixel(int x,int y,int c)
- { COLORREF color;
- color=0xff & c;
- color=(color<<16) | (color<<8) | color;
- CClientDC dc(this);
- dc.SetPixelV(x,y,color);
- }
- void CImageProDlg::WritePixelEX(int x,int y,int c)
- { COLORREF color=(COLORREF) c;
- CClientDC dc(this);
- dc.SetPixelV(x,y,color);
- }
- void CImageProDlg::WritePixelA(int x, int y, int graycolor)
- {
- COLORREF color;
- color=0xff & graycolor;
- color=(color<<16) | (color<<8) | color;
- CClientDC dc(this);
- dc.SetPixelV(x+outLeft,y+outTop,color);
- }
- void CImageProDlg::HistogramA()
- {
- m_But_Go.EnableWindow(true);
- CClientDC dc(this);
- RePaintRect(PreArea);
-
- int iNumOfPixel=320*200;
- double dPixelData[255];
- int temp=0;
- for (int i=0;i<256;i++)
- dPixelData[i]=0;
- for (int yd=CurAreaTop;yd<=CurAreaTop+199;yd++){
- for (int xd=CurAreaLeft;xd<=CurAreaLeft+319;xd++){
- temp=dc.GetPixel(xd,yd) & 0xff;
- dPixelData[temp]=dPixelData[temp]+1.0;}}
- double maxtemp=0;
- for (i=0;i<256;i++){
- if (dPixelData[i]>maxtemp) maxtemp=dPixelData[i];}
- for (i=0;i<256;i++){
- dPixelData[i]/=maxtemp;}
-
- int iHInfo=outBottom-outTop,iXS=outLeft,iYT=0;
-
- for (i=0;i<256;i++){
- iYT=(int) ((outBottom) - ((int) (iHInfo * dPixelData[i]))) ;
- Drawline(iXS,outBottom,iXS,iYT);
- iXS++;}
- m_But_Go.EnableWindow(true);
- }
- void CImageProDlg::LinearChangeA()
- {
- m_But_Go.EnableWindow(false);
- CClientDC dc(this);
- RePaintRect(PreArea);
- int gray[255];
- CString temp;
- m_Edit_SL.GetWindowText(temp);
- int sourLow=_ttoi(temp);
- m_Edit_SH.GetWindowText(temp);
- int sourHigh=_ttoi(temp);
- m_Edit_DL.GetWindowText(temp);
- int DesLow=_ttoi(temp);
- m_Edit_DH.GetWindowText(temp);
- int DesHigh=_ttoi(temp);
-
- for (int i=0;i<256;i++){
- gray[i]=LinearChangeEX(sourLow,sourHigh,DesLow,DesHigh,i);
- }
- int graytemp=0;
- for (int yd=0;yd<=199;yd++){
- for (int xd=0;xd<=319;xd++){
- graytemp=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- WritePixelA(xd,yd,gray[graytemp]);
- }
- }
- m_But_Go.EnableWindow(true);
- }
- int CImageProDlg::LinearChangeEX(int SouLow, int SouHigh, int DestLow, int DestHigh, int value)
- {
- double c=(double) (DestHigh-DestLow)/(SouHigh-SouLow);
- int max=(DestHigh>DestLow)?DestHigh:DestLow;
- int min=DestHigh + DestLow - max;
- int res=(int) ((value-SouLow)*c+DestLow);
- if (res>max) res=max;
- if (res<min) res=min;
- return res;
- }
- void CImageProDlg::SharpA()
- {
- m_But_Go.EnableWindow(false);
- CClientDC dc(this);
- int graytemp=0;
- int graytempA=0;
- double c=((double) m_Sli_Alpha.GetPos()/100.0);
- if (iMode==1) { //四方向模板
- RePaintRect(PreArea);
- for (int yd=CurAreaTop+1;yd<=CurAreaTop+198;yd++){
- for (int xd=CurAreaLeft+1;xd<=CurAreaLeft+318;xd++){
- graytempA=dc.GetPixel(xd-1,yd) & 0xff;
- graytempA+=dc.GetPixel(xd+1,yd) & 0xff;
- graytempA+=dc.GetPixel(xd,yd-1) & 0xff;
- graytempA+=dc.GetPixel(xd,yd+1) & 0xff;
- graytemp=dc.GetPixel(xd,yd) & 0xff;
- graytemp=(int) ((1.0+4.0*c)*((double)graytemp)-c*((double)graytempA));
- if (graytemp<0) graytemp=0;
- if (graytemp>255) graytemp=255;
- WritePixel(xd+outLeft-CurAreaLeft,yd+outTop-CurAreaTop,graytemp);
- }
- }
- }
- else if (iMode==2) { //八方向模板
- RePaintRect(PreArea);
- for (int yd=CurAreaTop+1;yd<=CurAreaTop+198;yd++){
- for (int xd=CurAreaLeft+1;xd<=CurAreaLeft+318;xd++){
- graytempA=dc.GetPixel(xd-1,yd+1) & 0xff;
- graytempA+=dc.GetPixel(xd-1,yd) & 0xff;
- graytempA+=dc.GetPixel(xd-1,yd-1) & 0xff;
- graytempA+=dc.GetPixel(xd,yd+1) & 0xff;
- graytempA+=dc.GetPixel(xd,yd-1) & 0xff;
- graytempA+=dc.GetPixel(xd+1,yd) & 0xff;
- graytempA+=dc.GetPixel(xd+1,yd-1) & 0xff;
- graytempA+=dc.GetPixel(xd+1,yd+1) & 0xff;
- graytemp=dc.GetPixel(xd,yd) & 0xff;
- graytemp=(int) ((1.0+8.0*c)*((double)graytemp)-c*((double)graytempA));
- if (graytemp<0) graytemp=0;
- if (graytemp>255) graytemp=255;
- WritePixel(xd+outLeft-CurAreaLeft,yd+outTop-CurAreaTop,graytemp);
- }
- }
- }
- else
- MessageBox("请选择一种模板","Warning",MB_ICONHAND);
-
- m_But_Go.EnableWindow(true);
- }
- void CImageProDlg::SmoothA()
- {
- m_But_Go.EnableWindow(false);
- CClientDC dc(this);
- int graytemp=0;
- int graytempA=0;
- double c=((double) m_Sli_Alpha.GetPos()/100.0);
- if (iMode==1) { //四方向模板
- RePaintRect(PreArea);
- for (int yd=CurAreaTop+1;yd<=CurAreaTop+198;yd++){
- for (int xd=CurAreaLeft+1;xd<=CurAreaLeft+318;xd++){
- graytempA=dc.GetPixel(xd-1,yd) & 0xff;
- graytempA+=dc.GetPixel(xd+1,yd) & 0xff;
- graytempA+=dc.GetPixel(xd,yd-1) & 0xff;
- graytempA+=dc.GetPixel(xd,yd+1) & 0xff;
- graytemp=dc.GetPixel(xd,yd) & 0xff;
- graytemp=(int) ((1.0-4.0*c)*((double)graytemp)+c*((double)graytempA));
- if (graytemp<0) graytemp=0;
- if (graytemp>255) graytemp=255;
- WritePixel(xd+outLeft-CurAreaLeft,yd+outTop-CurAreaTop,graytemp);
- }
- }
- }
- else if (iMode==2) { //八方向模板
- RePaintRect(PreArea);
- for (int yd=CurAreaTop+1;yd<=CurAreaTop+198;yd++){
- for (int xd=CurAreaLeft+1;xd<=CurAreaLeft+318;xd++){
- graytempA=dc.GetPixel(xd-1,yd+1) & 0xff;
- graytempA+=dc.GetPixel(xd-1,yd) & 0xff;
- graytempA+=dc.GetPixel(xd-1,yd-1) & 0xff;
- graytempA+=dc.GetPixel(xd,yd+1) & 0xff;
- graytempA+=dc.GetPixel(xd,yd-1) & 0xff;
- graytempA+=dc.GetPixel(xd+1,yd) & 0xff;
- graytempA+=dc.GetPixel(xd+1,yd-1) & 0xff;
- graytempA+=dc.GetPixel(xd+1,yd+1) & 0xff;
- graytemp=dc.GetPixel(xd,yd) & 0xff;
- graytemp=(int) ((1.0-8.0*c)*((double)graytemp)+c*((double)graytempA));
- if (graytemp<0) graytemp=0;
- if (graytemp>255) graytemp=255;
- WritePixel(xd+outLeft-CurAreaLeft,yd+outTop-CurAreaTop,graytemp);
- }
- }
- }
- else
- MessageBox("请选择一种模板","Warning",MB_ICONHAND);
- m_But_Go.EnableWindow(true);
- }
- void CImageProDlg::SpuColorA()
- {
- m_But_Go.EnableWindow(false);
- CClientDC dc(this);
- int redgray[255],greengray[255],bluegray[255];
- if (iMode==1){
- RePaintRect(PreArea);
- for (int i=0;i<256;i++){
- redgray[i]=LinearChangeEX(128,192,0,255,i);
- bluegray[i]=LinearChangeEX(64,127,255,0,i);
- if (i<64)
- greengray[i]=LinearChangeEX(0,63,0,255,i);
- else if (i>190)
- greengray[i]=LinearChangeEX(191,250,255,0,i);
- else
- greengray[i]=255;
- }
- }
- else if (iMode==2){
- RePaintRect(PreArea);
- double c=((double) m_Sli_Alpha.GetPos())/AlphaA;
- for (int i=0;i<256;i++){
- redgray[i]=greengray[i]=bluegray[i]=0;
- redgray[i]=(int) (255.0-c*((double)i-175.0)*((double)i-175.0));
- if (redgray[i]<0) redgray[i]=0;
- if (redgray[i]>255) redgray[i]=255;
- greengray[i]=(int) (255.0-c*((double)i-80.0)*((double)i-80.0));
- if (greengray[i]<0) greengray[i]=0;
- if (greengray[i]>255) greengray[i]=255;
- if (i<=127){
- bluegray[i]=(int) (255.0-c*((double)i)*((double)i));
- if (greengray[i]<0) greengray[i]=0;
- if (greengray[i]>255) greengray[i]=255;}
- if (i>127){
- bluegray[i]=(int) (255.0-c*((double)i-255.0)*((double)i-255.0));
- if (greengray[i]<0) greengray[i]=0;
- if (greengray[i]>255) greengray[i]=255;}
-
-
- }
- }
- else
- {MessageBox("请选择一种模板","Warning",MB_ICONHAND);
- m_But_Go.EnableWindow(true);
- return;}
- int temp=0;
- for (int yd=0;yd<=199;yd++){
- for (int xd=0;xd<=319;xd++){
- temp=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- WritePixelEX(xd+outLeft,yd+outTop,RGB(redgray[temp],greengray[temp],bluegray[temp]));}}
- /*
- for (int xd=0;xd<=255;xd++){
- for (int yd=0;yd<=40;yd++){
- WritePixelEX(xd+outLeft,yd+outTop,RGB(redgray[xd],0,0));}
- for (yd=50;yd<=90;yd++){
- WritePixelEX(xd+outLeft,yd+outTop,RGB(0,greengray[xd],0));}
- for (yd=100;yd<=140;yd++){
- WritePixelEX(xd+outLeft,yd+outTop,RGB(0,0,bluegray[xd]));}
- for (yd=150;yd<=190;yd++){
- WritePixel(xd+outLeft,yd+outTop,xd);}
- for (yd=200;yd<=240;yd++){
- WritePixelEX(xd+outLeft,yd+outTop,RGB(redgray[xd],greengray[xd],bluegray[xd]));}
- }
- */
- m_But_Go.EnableWindow(true);
- }
- void CImageProDlg::MidFilterA()
- {
- m_But_Go.EnableWindow(false);
- CClientDC dc(this);
-
- int graytemp[9],temp=0;
- for (int is=0;is<=9;is++)
- graytemp[is]=0;
- if (iMode==1) { //1X3模板
- RePaintRect(PreArea);
- for (int yd=0;yd<=199;yd++){
- for (int xd=1;xd<=318;xd++){
- graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- graytemp[1]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
- graytemp[2]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop) & 0xff;
- WritePixelA(xd,yd,midSortEX(graytemp,3));
- }
- }
- }
- else if (iMode==2) { //1X5模板
- RePaintRect(PreArea);
- for (int yd=0;yd<=199;yd++){
- for (int xd=2;xd<=317;xd++){
- graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- graytemp[1]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
- graytemp[2]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop) & 0xff;
- graytemp[4]=dc.GetPixel(xd+CurAreaLeft-2,yd+CurAreaTop) & 0xff;
- graytemp[5]=dc.GetPixel(xd+CurAreaLeft+2,yd+CurAreaTop) & 0xff;
- WritePixelA(xd,yd,midSortEX(graytemp,5));
- }
- }
- }
- else if (iMode==3) { //3X1模板
- RePaintRect(PreArea);
- for (int yd=1;yd<=198;yd++){
- for (int xd=0;xd<=319;xd++){
- graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- graytemp[1]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
- graytemp[2]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+1) & 0xff;
- WritePixelA(xd,yd,midSortEX(graytemp,3));
- }
- }
- }
- else if (iMode==4) { //5X1模板
- RePaintRect(PreArea);
- for (int yd=2;yd<=197;yd++){
- for (int xd=0;xd<=319;xd++){
- graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- graytemp[1]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
- graytemp[2]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+1) & 0xff;
- graytemp[4]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-2) & 0xff;
- graytemp[5]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+2) & 0xff;
- WritePixelA(xd,yd,midSortEX(graytemp,5));
- }
- }
- }
- else if (iMode==5) { //3X3十字模板
- RePaintRect(PreArea);
- for (int yd=1;yd<=198;yd++){
- for (int xd=1;xd<=318;xd++){
- graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- graytemp[1]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
- graytemp[2]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop) & 0xff;
- graytemp[4]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
- graytemp[5]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+1) & 0xff;
- WritePixelA(xd,yd,midSortEX(graytemp,5));
- }
- }
- }
- else if (iMode==6) { //5X5十字模板
- RePaintRect(PreArea);
- for (int yd=1;yd<=198;yd++){
- for (int xd=1;xd<=318;xd++){
- graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- graytemp[1]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
- graytemp[2]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop) & 0xff;
- graytemp[3]=dc.GetPixel(xd+CurAreaLeft-2,yd+CurAreaTop) & 0xff;
- graytemp[4]=dc.GetPixel(xd+CurAreaLeft+2,yd+CurAreaTop) & 0xff;
- graytemp[5]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
- graytemp[6]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+1) & 0xff;
- graytemp[7]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-2) & 0xff;
- graytemp[8]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+2) & 0xff;
- WritePixelA(xd,yd,midSortEX(graytemp,5));
- }
- }
- }
- else if (iMode==7) { //3X3模板
- RePaintRect(PreArea);
- for (int yd=1;yd<=198;yd++){
- for (int xd=1;xd<=318;xd++){
- graytemp[0]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- graytemp[1]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop-1) & 0xff;
- graytemp[2]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
- graytemp[3]=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop+1) & 0xff;
- graytemp[4]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
- graytemp[5]=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop+1) & 0xff;
- graytemp[6]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop-1) & 0xff;
- graytemp[7]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop) & 0xff;
- graytemp[8]=dc.GetPixel(xd+CurAreaLeft+1,yd+CurAreaTop+1) & 0xff;
- WritePixelA(xd,yd,midSortEX(graytemp,9));
- }
- }
- }
- else
- MessageBox("请选择一种模板","Warning",MB_ICONHAND);
- m_But_Go.EnableWindow(true);
- }
- int CImageProDlg::midSortEX(int arr[],int num)
- {
- int maxnum=0,maxpos=0;
- for (int i=0;i<=((num-1)/2);i++){
- maxnum=arr[i];
- maxpos=i;
- for (int s=i;s<num;s++)
- if (arr[s]>=maxnum){
- maxnum=arr[s];
- maxpos=s;}
- arr[maxpos]=arr[i];
- arr[i]=maxnum;
- }
- return arr[((num-1)/2)];
- }
- void CImageProDlg::ImageDivA()
- {
- m_But_Go.EnableWindow(false);
- CClientDC dc(this);
-
- int temp=0;
- if (iMode==1) { //二值门限
- RePaintRect(PreArea);
- int c=m_Sli_Alpha.GetPos();
- for (int yd=0;yd<=199;yd++){
- for (int xd=0;xd<=319;xd++){
- temp=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- if (temp>c) temp=255;
- else temp =0;
- WritePixelA(xd,yd,temp);
- }
- }
- }
- else if (iMode==2) { //非二值门限1
- RePaintRect(PreArea);
- int c=m_Sli_Alpha.GetPos();
- for (int yd=0;yd<=199;yd++){
- for (int xd=0;xd<=319;xd++){
- temp=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- if (temp>c) temp=255;
- WritePixelA(xd,yd,temp);
- }
- }
- }
- else if (iMode==3) { //非二值门限2
- RePaintRect(PreArea);
- int c=m_Sli_Alpha.GetPos();
- for (int yd=0;yd<=199;yd++){
- for (int xd=0;xd<=319;xd++){
- temp=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- if (temp<c) temp=255;
- WritePixelA(xd,yd,temp);
- }
- }
- }
-
- else if (iMode==4) { //梯度模板
- RePaintRect(PreArea);
- int temp1,temp2,delta1,delta2,c=m_Sli_Alpha.GetPos();
- for (int yd=1;yd<=199;yd++){
- for (int xd=1;xd<=319;xd++){
- temp1=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- temp2=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
- delta1=abs(temp1-temp2);
- temp1=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- temp2=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
- delta2=abs(temp1-temp2);
- temp=( ((delta1>delta2)?delta1:delta2)>=c) ? 0:255;
- WritePixelA(xd,yd,temp);
- }
- }
- }
-
- else if (iMode==5) { //Roberts梯度模板
- RePaintRect(PreArea);
- int temp1,temp2,delta1,delta2,c=m_Sli_Alpha.GetPos();
- for (int yd=1;yd<=199;yd++){
- for (int xd=1;xd<=319;xd++){
- temp1=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop) & 0xff;
- temp2=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop-1) & 0xff;
- delta1=abs(temp1-temp2);
- temp1=dc.GetPixel(xd+CurAreaLeft-1,yd+CurAreaTop) & 0xff;
- temp2=dc.GetPixel(xd+CurAreaLeft,yd+CurAreaTop-1) & 0xff;
- delta2=abs(temp1-temp2);
- temp=( ((delta1>delta2)?delta1:delta2)>=c) ? 0:255;
- WritePixelA(xd,yd,temp);
- }
- }
- }
- else
- MessageBox("请选择一种模板","Warning",MB_ICONHAND);
- m_But_Go.EnableWindow(true);
- }