⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 showdibview.cpp

📁 geomorphological remote sensing classification by matlab from CUP
💻 CPP
字号:
// ShowDIBView.cpp : implementation of the CShowDIBView class
//

#include "stdafx.h"
#include "ShowDIB.h"
#include "Statics.h"
#include "Statics2.h"
#include "Dialog3.h"
#include "Dialog41.h"
#include "Dialog5.h"
#include "DIB.h"
#include "ShowDIBDoc.h"
#include "ShowDIBView.h"
#include<stdio.h>
#include<string.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CShowDIBView

IMPLEMENT_DYNCREATE(CShowDIBView, CView)

BEGIN_MESSAGE_MAP(CShowDIBView, CView)
	//{{AFX_MSG_MAP(CShowDIBView)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_STYLE_STRETCHED, OnStyleStretched)
	ON_COMMAND(ID_STYLE_NORMAL, OnStyleNormal)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	ON_COMMAND(ID_PROCESS_2value, OnPROCESS2value)
	ON_COMMAND(ID_PROCESS_MAX, OnPROCESSMAXvalue)
	ON_COMMAND(ID_PROCESS_MIN, OnPROCESSMINvalue)	
	ON_COMMAND(ID_PROCESS_AVERAGE, OnPROCESSAVERAGEvalue)
	ON_COMMAND(ID_PROCESS_STATICS, OnPROCESSSTATICSvalue)	
	ON_COMMAND(ID_PROCESS_HISTOGRAM, OnPROCESSHISTOGRAMvalue)
	ON_COMMAND(ID_PROCESS_MEDI, OnPROCESSMEDIvalue)
	ON_COMMAND(ID_PROCESS_SOBEL, OnPROCESSSOBELvalue)
	ON_COMMAND(ID_PROCESS_DCT, OnPROCESSDCTvalue)
	ON_COMMAND(ID_PROCESS_IDCT, OnPROCESSIDCTvalue)
	ON_COMMAND(ID_PROCESS_IIDCT, OnIIdct)  
	ON_COMMAND(ID_PROCESS_NN,NN)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShowDIBView construction/destruction

CShowDIBView::CShowDIBView()
{
	ImageStyle = 0;
}

CShowDIBView::~CShowDIBView()
{
}

BOOL CShowDIBView::PreCreateWindow(CREATESTRUCT& cs)
{
	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CShowDIBView drawing

void CShowDIBView::OnDraw(CDC* pDC)
{
	CShowDIBDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	RECT Rect;
	GetClientRect( &Rect );
	m_Dib.SetPalette( pDC );
	m_Dib.Draw( pDC, 0, 0,
		Rect.right, Rect.bottom, ImageStyle );
    //my code
	int i,j;
	for(i=0;i<256;i++)
		for(j=0;j<256;j++)
		{
		   if(m_Dib.myimage[0][i][j]==255)pDC->SetPixel(j,i,RGB(50,50,200));  //blue
		 else if(m_Dib.myimage[0][i][j]==100)pDC->SetPixel(j,i,RGB(0,0,0));  //black
			else if(m_Dib.myimage[0][i][j]==0)pDC->SetPixel(j,i,RGB(200,0,0));//red
		 	else if(m_Dib.myimage[0][i][j]==1)pDC->SetPixel(j,i,RGB(0,200,0));//yellow
			else if(m_Dib.myimage[0][i][j]==2)pDC->SetPixel(j,i,RGB(255,255,255));//white
			else if(m_Dib.myimage[0][i][j]==3)pDC->SetPixel(j,i,RGB(200,200,0));//green
			else if(m_Dib.myimage[0][i][j]==4)pDC->SetPixel(j,i,RGB(200,0,200));  //ji se
			else if(m_Dib.myimage[0][i][j]==5)pDC->SetPixel(j,i,RGB(0,200,200));
			else if(m_Dib.myimage[0][i][j]==6)pDC->SetPixel(j,i,RGB(100,200,0)); //cao lv
		}
ReleaseDC(pDC);
}

/////////////////////////////////////////////////////////////////////////////
// CShowDIBView diagnostics

#ifdef _DEBUG
void CShowDIBView::AssertValid() const
{
	CView::AssertValid();
}

void CShowDIBView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CShowDIBDoc* CShowDIBView::GetDocument()
	// non-debug version is inline
{
	ASSERT(
		m_pDocument->IsKindOf(RUNTIME_CLASS(CShowDIBDoc)));
	return (CShowDIBDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CShowDIBView message handlers
void CShowDIBView::OnFileOpen() 
{
	static char szFilter[] = "BMP Files(*.BMP)|*.BMP|All Files(*.*)|*.*||";
	CFileDialog FileDlg( TRUE, NULL, NULL,
		OFN_HIDEREADONLY, szFilter );

	if( FileDlg.DoModal() == IDOK &&
		m_Dib.Load( FileDlg.GetPathName() ) ){
		InvalidateRect( NULL, TRUE );
		UpdateWindow();
		}
}
void CShowDIBView::OnIIdct()
{ /*  
static char szFilter[] = "BMP Files(*.BMP)|*.BMP|All Files(*.*)|*.*||";
CFileDialog FileDlg( TRUE, NULL, NULL,OFN_HIDEREADONLY, szFilter );
if( FileDlg.DoModal() == IDOK &&m_Dib.Load( FileDlg.GetPathName() ) )
{   /*/
CDialog5 dlb;
dlb.DoModal();
FILE *stream;
stream = fopen( "word.txt", "w" );		
int N=8; 
const char *fname;  fname= (dlb.m_name); //fname=strcpy(fname,dlb.m_name); //char * fname=(dlb.m_name);

FILE *fp_i;
if((fp_i=fopen(fname,"rb"))==NULL){	AfxMessageBox("cannot open this file!"); exit(0);};

int Len=0;   int Wid=0;  
Len=fgetc(fp_i);    Wid=Len;  rewind(fp_i);
//int Len=10;int Wid=10;   // Len=getc(dlb.m_name);
Len=Len*8;Wid=Wid*8;
unsigned char *ch0;	
ch0=new unsigned char[(Len/N)*(Wid/N)*16+2];
for(int i=0;i<(Len/N)*(Wid/N)*16+2;i++)
{
	ch0[i]=0;
}
fread(ch0,1,(Len/N)*(Wid/N)*16+2,fp_i);fclose(fp_i);
/*
FILE *fp_i=fopen("image_Dct.dct","rb"); 
fread(ch0,4,(Len/N)*(Wid/N)*16+2,fp_i);
fclose(fp_i); */ 
int *ch;
ch=new int[(Len/N)*(Wid/N)*16+2];
ch[0]=ch0[0];ch[1]=ch0[1];
for(i=2;i<(Len/N)*(Wid/N)*16+2;i++)
{
ch[i]=int(ch0[i])-128;
//fprintf( stream, "%d ",ch[i]);
}  

m_Dib.IIdct(Len,Wid,ch);  
//}	

fclose( stream );
system( "type word.txt" );
//
AfxMessageBox("This file has extracted to 'recode.bmp'!");
m_Dib.Load("recode.bmp");
InvalidateRect( NULL, TRUE );
UpdateWindow();
} 

void CShowDIBView::OnStyleStretched() 
{
	// TODO: Add your command handler code here
	ImageStyle = 1;
	
	CMenu *pMnu = AfxGetMainWnd()->GetMenu( );
	pMnu->CheckMenuItem(ID_STYLE_STRETCHED,MF_CHECKED);
	pMnu->CheckMenuItem(ID_STYLE_NORMAL,MF_UNCHECKED);
	
	InvalidateRect( NULL, TRUE );
	UpdateWindow();
}

void CShowDIBView::OnStyleNormal() 
{
	// TODO: Add your command handler code here
	ImageStyle = 0;

	CMenu *pMnu = AfxGetMainWnd()->GetMenu( );
	pMnu->CheckMenuItem(ID_STYLE_STRETCHED,MF_UNCHECKED);
	pMnu->CheckMenuItem(ID_STYLE_NORMAL,MF_CHECKED);
	
	InvalidateRect( NULL, TRUE );
	UpdateWindow();
}


void CShowDIBView::OnFileSave() 
{
	// TODO: Add your command handler code here
	static char szFilter[] = "BMP Files(*.BMP)|*.BMP|All Files(*.*)|*.*||";

	CFileDialog FileDlg( FALSE, "bmp", NULL,
		OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter );

	if( FileDlg.DoModal() == IDOK &&
		m_Dib.Save( FileDlg.GetPathName() ) ){
		InvalidateRect( NULL, TRUE );
		UpdateWindow();
		}
	
}


void CShowDIBView::OnPROCESS2value() 
{
	// TODO: Add your command handler code here
  
	if (m_Dib.ConvertToTwoValue())
	{
		InvalidateRect( NULL, TRUE );
		UpdateWindow();
	}
}
void CShowDIBView::OnPROCESSHISTOGRAMvalue() 
{
	// TODO: Add your command handler code here
 
	CStatics2 dlb;
    dlb.DoModal();
    //dlb.UpdateData();
	if (m_Dib.ConvertToHISTOGRAMvalue(dlb.m_jishu))
	{
		InvalidateRect( NULL, TRUE );
		UpdateWindow();
	}
}


void CShowDIBView::OnPROCESSMAXvalue() 
{CStatics dlb;
  int Temp;
  CString str;
 Temp=m_Dib.ConvertToMAXvalue();

 dlb.m_max.Format("%d",Temp);
  dlb.DoModal();
 dlb.UpdateData();
}
void CShowDIBView::OnPROCESSMINvalue() 
{CStatics dlb;
  int Temp;
 // CString str;
  Temp=m_Dib.ConvertToMINvalue();

  dlb.m_min.Format("%d",Temp);
  dlb.DoModal();
 dlb.UpdateData();
}
void CShowDIBView::OnPROCESSAVERAGEvalue() 
{CStatics dlb;
  int Temp;
  CString str;
 Temp=m_Dib.ConvertToAVERAGEvalue();

  dlb.m_average.Format("%d",Temp);
  dlb.DoModal();
 dlb.UpdateData();
 
}
void CShowDIBView::OnPROCESSSTATICSvalue() 
{
  CStatics dlb;
  int Temp;
  CString str;
  dlb.his=m_Dib.ConvertToDRAWHISTOGRAMvalue();
	
  Temp=m_Dib.ConvertToMAXvalue();
  dlb.m_max.Format("%d",Temp);
  Temp=m_Dib.ConvertToMINvalue();
  dlb.m_min.Format("%d",Temp);
  Temp=m_Dib.ConvertToAVERAGEvalue();
  dlb.m_average.Format("%d",Temp);
  dlb.DoModal();
  dlb.UpdateData();
 	
}
void CShowDIBView::OnPROCESSMEDIvalue() 
{
  
	CDialog4 dlb;
    dlb.DoModal();
    //dlb.UpdateData();
	if (m_Dib.ConvertToMEDIANvalue(dlb.m_n))
	{
		InvalidateRect( NULL, TRUE );
		UpdateWindow();
	}
 	
}
void CShowDIBView::OnPROCESSSOBELvalue() 
{
  
    //dlb.UpdateData();
	if (m_Dib.ConvertToSobelvalue())
	{
		InvalidateRect( NULL, TRUE );
		UpdateWindow();
	}
 	
}
void CShowDIBView::OnPROCESSDCTvalue() 
{
  
    //dlb.UpdateData();
	if (m_Dib.ConvertToDctvalue())
	{
		InvalidateRect( NULL, TRUE );
		UpdateWindow();
		AfxMessageBox("!This file has compressed to 'image_code'!");
	} 	
}
void CShowDIBView::OnPROCESSIDCTvalue() 
{
  
    //dlb.UpdateData();
	if (m_Dib.ConvertToIDctvalue())
	{
		InvalidateRect( NULL, TRUE );
		UpdateWindow();
	} 	
}
void CShowDIBView::NN()
{
	///神经网络
//	AfxMessageBox("Please open the swatch !"); //输入样本
  	if (m_Dib.NN())
	{ 
		int i=0;
	    AfxMessageBox("Please open the Sourse image !");
		for(i=0;i<12;i++)
		{
		static char szFilter[] = "BMP Files(*.BMP)|*.BMP|All Files(*.*)|*.*||";
		CFileDialog FileDlg( TRUE, NULL, NULL,
			OFN_HIDEREADONLY, szFilter );
		
		if( FileDlg.DoModal() == IDOK &&
			m_Dib.Load( FileDlg.GetPathName() ) ){
			InvalidateRect( NULL, TRUE );
			UpdateWindow();
		}
		m_Dib.Readmyimage(i);
		}
        m_Dib.study();
		InvalidateRect( NULL, TRUE );
		UpdateWindow();
	} 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -