📄 showdibview.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 + -