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

📄 iprocesspview.cpp

📁 VC++ using in image processing
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// IProcessPView.cpp : CIProcessPView 类的实现
//

#include "stdafx.h"
#include "IProcessP.h"

#include "IProcessPDoc.h"
#include "IProcessPView.h"
#include ".\iProcessPview.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CIProcessPView

IMPLEMENT_DYNCREATE(CIProcessPView, CView)

BEGIN_MESSAGE_MAP(CIProcessPView, CView)
	// 标准打印命令
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
	ON_WM_PAINT()

	ON_COMMAND(ID_256COLOR_IMAGE_EXAM, On256colorImageExam)
	ON_COMMAND(ID_TRUECOLOR_IMAGE_EXAM, OnTruecolorImageExam)
	ON_COMMAND(ID_REFRESH, OnRefresh)

	ON_COMMAND(ID_IMAGE_PALETTE, OnImagePalette)
	ON_COMMAND(ID_GRAY_PALETTE, OnGrayPalette)
	ON_COMMAND(ID_BLUE_PALETTE, OnBluePalette)
	ON_COMMAND(ID_DEFAULT_PALETTE, OnDefaultPalette)
	ON_COMMAND(ID_RESTORE_PALETTE, OnRestorePalette)
	ON_COMMAND(ID_MOV_PALETTE, OnMovPalette)
	ON_COMMAND(ID_PASTE_REFRESH, OnPasteRefresh)
	ON_COMMAND(ID_CONSERVATION_IMAGE, OnConservationImage)
	ON_COMMAND(ID_CLOSE_IMAGE, OnCloseImage)
 	ON_COMMAND(ID_CLEAR_WINDOW, OnClearWindow)
	ON_COMMAND(ID_DRAW_REFRESH, OnDrawRefresh)
 	ON_COMMAND(ID_SELECT_IMAGE, OnSelectImage)
	ON_COMMAND(ID_SELECT_WINDOW, OnSelectWindow)
	ON_COMMAND(ID_IMAGE_PARAMENT, OnImageParament)

 	ON_COMMAND(ID_DRAW_PIXEL, OnDrawPixel)
  	ON_COMMAND(ID_DRAW_TEXT, OnDrawText)
	ON_COMMAND(ID_GRAPH_FILL, OnGraphFill)
	ON_COMMAND(ID_COPY_BITMAP, OnCopyBitmap)
	ON_COMMAND(ID_RAND_CIRCLE, OnRandCircle)

	ON_UPDATE_COMMAND_UI(ID_REFRESH, OnUpdateRefresh)
	ON_UPDATE_COMMAND_UI(ID_IMAGE_PALETTE, OnUpdateImagePalette)
	ON_UPDATE_COMMAND_UI(ID_GRAY_PALETTE, OnUpdateGrayPalette)
	ON_UPDATE_COMMAND_UI(ID_BLUE_PALETTE, OnUpdateBluePalette)
	ON_UPDATE_COMMAND_UI(ID_RESTORE_PALETTE, OnUpdateRestorePalette)
	ON_UPDATE_COMMAND_UI(ID_MOV_PALETTE, OnUpdateMovPalette)
	ON_UPDATE_COMMAND_UI(ID_PASTE_REFRESH, OnUpdatePasteRefresh)
 	ON_UPDATE_COMMAND_UI(ID_CONSERVATION_IMAGE, OnUpdateConservationImage)
	ON_UPDATE_COMMAND_UI(ID_CLOSE_IMAGE, OnUpdateCloseImage)
	ON_UPDATE_COMMAND_UI(ID_DRAW_REFRESH, OnUpdateDrawRefresh)
 	ON_UPDATE_COMMAND_UI(ID_SELECT_IMAGE, OnUpdateSelectImage)
	ON_UPDATE_COMMAND_UI(ID_IMAGE_PARAMENT, OnUpdateImageParament)
 	ON_WM_TIMER()

	ON_COMMAND(ID_GRAY_IMAGE, OnGrayImage)
 	ON_COMMAND(ID_INDEX_IMAGE, OnIndexImage)
	ON_COMMAND(ID_IMAGE_INVERT, OnImageInvert)
	ON_COMMAND(ID_COLOR_MONOCHROM, OnColorToMonochrom)
	ON_UPDATE_COMMAND_UI(ID_GRAY_IMAGE, OnUpdateGrayImage)
	ON_UPDATE_COMMAND_UI(ID_IMAGE_INVERT, OnUpdateImageInvert)
	ON_UPDATE_COMMAND_UI(ID_COLOR_MONOCHROM, OnUpdateColorToMonochrom)
 	ON_UPDATE_COMMAND_UI(ID_INDEX_IMAGE, OnUpdateIndexImage)

	ON_COMMAND(ID_FLIP_HORIZON, OnFlipHorizon)
	ON_COMMAND(ID_FLIP_VERT, OnFlipVert)
	ON_COMMAND(ID_ROTATE_90, OnRotate90)
	ON_COMMAND(ID_ROTATE_180, OnRotate180)
	ON_COMMAND(ID_ROTATE_270, OnRotate270)
	ON_COMMAND(ID_ZOOM_IN, OnZoomIn)
	ON_COMMAND(ID_ZOOM_OUT, OnZoomOut)
	ON_COMMAND(ID_IMAGE_MASAIC, OnImageMasaic)
	ON_COMMAND(ID_IMAGE_ROTATE, OnImageRotate)
	ON_COMMAND(ID_IMAGE_SCALE, OnImageScale)
	ON_UPDATE_COMMAND_UI(ID_FLIP_HORIZON, OnUpdateFlipHorizon)
	ON_UPDATE_COMMAND_UI(ID_FLIP_VERT, OnUpdateFlipVert)
	ON_UPDATE_COMMAND_UI(ID_ROTATE_90, OnUpdateRotate90)
	ON_UPDATE_COMMAND_UI(ID_ROTATE_180, OnUpdateRotate180)
	ON_UPDATE_COMMAND_UI(ID_ROTATE_270, OnUpdateRotate270)
	ON_UPDATE_COMMAND_UI(ID_ZOOM_IN, OnUpdateZoomIn)
	ON_UPDATE_COMMAND_UI(ID_ZOOM_OUT, OnUpdateZoomOut)
	ON_UPDATE_COMMAND_UI(ID_IMAGE_MASAIC, OnUpdateImageMasaic)
	ON_UPDATE_COMMAND_UI(ID_IMAGE_ROTATE, OnUpdateImageRotate)
	ON_UPDATE_COMMAND_UI(ID_IMAGE_SCALE, OnUpdateImageScale)

	ON_COMMAND(ID_AREA_SELECT, OnAreaSelect)
	ON_COMMAND(ID_AREA_CUT, OnAreaCut)
	ON_COMMAND(ID_BITMAP_COPY, OnBitmapCopy)
	ON_COMMAND(ID_AREA_WANDER, OnAreaBrowse)
	ON_COMMAND(ID_AREA_MOVE, OnAreaMove)
	ON_COMMAND(ID_PIXEL_VALUE, OnPixelValue)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_UPDATE_COMMAND_UI(ID_AREA_SELECT, OnUpdateAreaSelect)
	ON_UPDATE_COMMAND_UI(ID_AREA_CUT, OnUpdateAreaCut)
	ON_UPDATE_COMMAND_UI(ID_BITMAP_COPY, OnUpdateBitmapCopy)
 	ON_UPDATE_COMMAND_UI(ID_AREA_WANDER, OnUpdateAreaBrowse)
	ON_UPDATE_COMMAND_UI(ID_AREA_MOVE, OnUpdateAreaMove)
	ON_UPDATE_COMMAND_UI(ID_PIXEL_VALUE, OnUpdatePixelValue)

	ON_COMMAND(ID_AREA_COPY, OnAreaCopy)
	ON_COMMAND(ID_AREA_PASTE, OnAreaPaste)
	ON_UPDATE_COMMAND_UI(ID_AREA_COPY, OnUpdateAreaCopy)
	ON_UPDATE_COMMAND_UI(ID_AREA_PASTE, OnUpdateAreaPaste)
	ON_COMMAND(ID_HATCH_FILL, OnHatchFill)
	ON_COMMAND(ID_DRAW_LINE, OnDrawLine)
	ON_COMMAND(ID_PATTERN_FILL, OnPatternFill)
END_MESSAGE_MAP()

// CIProcessPView 构造/析构

extern CImage	SaveCanvus,WorkCanvus,DibCopy,img3,img4,img5,img6,img7,img8,WindowCanvus;
extern CImage*	pImg[10];
extern CString	m_FileName;
extern int		m_nFArea;

CIProcessPView::CIProcessPView()
{
	// TODO: 在此处添加构造代码
 	m_nGraphicFlag=0;
	m_nFlag=0;
 	m_fAlpha=30*PI/180;
	m_fTheta=1.3;
}

CIProcessPView::~CIProcessPView()
{
}

BOOL CIProcessPView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
	// 样式

	return CView::PreCreateWindow(cs);
}

// CIProcessPView 绘制

void CIProcessPView::OnDraw(CDC* /*pDC*/)
{
	CIProcessPDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO: 在此处为本机数据添加绘制代码
	if (SaveCanvus.IsNull()) return;
	OnClearWindow();                  
  	WriteTitle(pImg[1],m_FileName,"");
   	WorkCanvusToWindow();           
 	m_nSize=1;
	m_nFlag=0;
	m_nFArea=0;
}


// CIProcessPView 打印

BOOL CIProcessPView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// 默认准备
	return DoPreparePrinting(pInfo);
}

void CIProcessPView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 打印前添加额外的初始化
}

void CIProcessPView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 打印后添加清除过程
}


// CIProcessPView 诊断

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

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

CIProcessPDoc* CIProcessPView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CIProcessPDoc)));
	return (CIProcessPDoc*)m_pDocument;
}
#endif //_DEBUG


// CIProcessPView 消息处理程序

void CIProcessPView::OnUpdateRefresh(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateImagePalette(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(SaveCanvus.GetBPP()<=8));
}

void CIProcessPView::OnUpdateGrayPalette(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(SaveCanvus.GetBPP()==8));
}

void CIProcessPView::OnUpdateBluePalette(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(SaveCanvus.GetBPP()==8));
}

void CIProcessPView::OnUpdateRestorePalette(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(SaveCanvus.GetBPP()==8));
}

void CIProcessPView::OnUpdateMovPalette(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(SaveCanvus.GetBPP()==8));
}

void CIProcessPView::OnUpdatePasteRefresh(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateConservationImage(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateCloseImage(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateDrawRefresh(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateSelectImage(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(SaveCanvus.GetBPP()>4));
}

void CIProcessPView::OnUpdateImageParament(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateGrayImage(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(ImageType(pImg[0]))>2);
}

void CIProcessPView::OnUpdateImageInvert(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateColorToMonochrom(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(ImageType(pImg[0]))>2);
}

void CIProcessPView::OnUpdateFlipHorizon(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateFlipVert(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateRotate90(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateRotate180(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateRotate270(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateZoomIn(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateZoomOut(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateImageRotate(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateImageScale(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateImageMasaic(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateBinaryImage(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdate16colorImage(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

void CIProcessPView::OnUpdateIndexImage(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(ImageType(pImg[0]))<2);
}

void CIProcessPView::OnUpdateAreaSelect(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(ImageType(pImg[0]))>=2);
}

void CIProcessPView::OnUpdateAreaCopy(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(m_nFArea));
}

void CIProcessPView::OnUpdateAreaCut(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!SaveCanvus.IsNull())&&(m_nFArea));
}

void CIProcessPView::OnUpdateBitmapCopy(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!pImg[3]->IsNull())&&(m_nFArea));
}

void CIProcessPView::OnUpdateAreaBrowse(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!pImg[3]->IsNull())&&(m_nFArea));
}

void CIProcessPView::OnUpdateAreaMove(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!pImg[3]->IsNull())&&(m_nFArea));
}

void CIProcessPView::OnUpdateAreaPaste(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable((!pImg[3]->IsNull())&&(m_nFArea));
}

void CIProcessPView::OnUpdatePixelValue(CCmdUI *pCmdUI)
{
 	pCmdUI->Enable(!SaveCanvus.IsNull());
}

//----------------------------------------------------

void CIProcessPView::On256colorImageExam() 
{
 	int	    i,j;
  
	if (!SaveCanvus.IsNull()) 
		SaveCanvus.Destroy();
 	SaveCanvus.Create(512,512,8,0);                         
	SetDefaultPalette(&SaveCanvus);                         

	for (i=0;i<256;i++)
		for (j=0;j<256;j++)	
			SetPixelValue(&SaveCanvus,j,i,j);

	for (i=0;i<256;i++)     
		for (j=0;j<256;j++)	
			SetPixelValue(&SaveCanvus,256+j,i,j/16);

	for (i=0;i<256;i++)     
		for (j=0;j<256;j++)	
			SetPixelValue(&SaveCanvus,j,256+i,(i/16)*16);

	RectFillValue(&SaveCanvus,255,255,257,257,7);
	for (i=0;i<16;i++)
		for (j=0;j<16;j++)
			RectFillValue(&SaveCanvus,256+j*16,256+i*16,15,15,i*16+j);    
  
	ImageCopy(pImg[1],pImg[0]);                                  
	m_FileName = "256 色模式图像实例";
	Invalidate();
}

void CIProcessPView::OnTruecolorImageExam() 
{
 	int		i,j,nBytesPerLine;
	BYTE	buff[2048];
 
	if (!SaveCanvus.IsNull()) 
		SaveCanvus.Destroy();
 	SaveCanvus.Create(512,512,24,0);                        
 
    nBytesPerLine = SaveCanvus.GetBPP()/8;
	for (i=0;i<256;i++) {
		for (j=0;j<3;j++) buff[i*nBytesPerLine+j]=(BYTE) i;    
	}
	for (i=0;i<256;i++)   
		SetRectValue(&SaveCanvus,0,0+i,256,1,buff);         

	for (i=0;i<256*nBytesPerLine;i++) buff[i]=0;
	for (i=0;i<256;i++) buff[i*nBytesPerLine]=(BYTE) i;        
	for (i=0;i<256;i++)                  	
		SetRectValue(&SaveCanvus,256,i,256,1,buff);	     
   
	for (i=0;i<256*nBytesPerLine;i++) buff[i]=0;      
	for (i=0;i<256;i++) buff[i*nBytesPerLine+1]=(BYTE) i;      
	for (i=0;i<256;i++)                  	
		SetRectValue(&SaveCanvus,0,256+i,256,1,buff);	     
   
	for (i=0;i<256*nBytesPerLine;i++) buff[i]=0;
	for (i=0;i<256;i++) buff[i*nBytesPerLine+2]=(BYTE) i;     
	for (i=0;i<256;i++)                  	
		SetRectValue(&SaveCanvus,256,256+i,256,1,buff);	     

	ImageCopy(pImg[1],pImg[0]);                                  
	m_FileName = "真彩色模式图像实例";
	Invalidate();
}

void CIProcessPView::WorkCanvusToWindow()         
{
	CClientDC	dc(this);
	struct IMAGEPARAMENT P;	
 
	if (SaveCanvus.IsNull()) return;
	GetImageParament(&WorkCanvus,&P);
	WorkCanvus.BitBlt(dc,0,0,P.nWidth,P.nHeight,0,0,SRCCOPY);
}

void CIProcessPView::OnRefresh() 
{
	if (SaveCanvus.IsNull()) return;
	OnClearWindow();                             
 	if (ImageType(pImg[0])<2) 
 		LowTypeToIndex(pImg[1],pImg[0]);
 	else
		ImageCopy(pImg[1],pImg[0]);
 	WriteTitle(pImg[1],m_FileName,"");                      
   	WorkCanvusToWindow();                      
    m_nFlag=0;
}

void CIProcessPView::WriteTitle(CImage* pImg,CString FileName,CString str0)   
{
	int		i,k;
	CString	str, str1;
 	struct	IMAGEPARAMENT P;
	char drive[_MAX_DRIVE];   
	char dir[_MAX_DIR];
	char fname[_MAX_FNAME];   
	char ext[_MAX_EXT];
 
	_splitpath(FileName, drive, dir, fname, ext);   
 
 	CWnd*	pMain = AfxGetMainWnd();
	CMenu*	pMenu = pMain->GetMenu();

	k=ImageType(pImg);                                 
	for (i=0;i<5;i++)
		pMenu->CheckMenuItem(ID_BINARY_IMAGE+i,MF_UNCHECKED);
	pMenu->CheckMenuItem(ID_BINARY_IMAGE+k,MF_CHECKED);   
 
	GetImageParament(pImg,&P);
	if (k==0) P.nBitCount=1;
	else if (k==1) P.nBitCount=4;
	str1.Format(" (%d×%d×%d)", P.nWidth, P.nHeight, P.nBitCount);  
	str.LoadString(AFX_IDS_APP_TITLE);             
 	AfxGetMainWnd()->SetWindowText(str+" - "+ 
		              fname + ext + str0 +str1);   
}

void CIProcessPView::OnGrayPalette()        
{
 	OnRefresh();
  	for (int i=0;i<256;i++)
		SetPalette(&WorkCanvus,i,i,i,i);       
	WorkCanvusToWindow();
}

void CIProcessPView::OnBluePalette()        
{
 	OnRefresh();
  	for (int i=0;i<256;i++)
		SetPalette(&WorkCanvus,i,0,0,i);       
	WorkCanvusToWindow();
}

void CIProcessPView::OnRestorePalette()
{
 	int			nNumColors; 
	RGBQUAD		ColorTab[256];
 
	OnRefresh();
	nNumColors=SaveCanvus.GetMaxColorTableEntries();
 	SaveCanvus.GetColorTable(0,nNumColors,ColorTab);
	WorkCanvus.SetColorTable(0,nNumColors,ColorTab);
	WorkCanvusToWindow();
}

void CIProcessPView::OnMovPalette()         
{
	OnRefresh();
 	SetTimer(ID_CLOCK_TIMER,100,NULL);               
	ShowCursor(FALSE);                               
	m_nFlag=ID_MOV_PALETTE;
}

void CIProcessPView::OnImagePalette()         
{
	RGBQUAD	ColorTab[256];
	int		nWidth,nNumColors;

	OnRefresh();
	nWidth =SaveCanvus.GetWidth();
	nNumColors=SaveCanvus.GetMaxColorTableEntries();
 	SaveCanvus.GetColorTable(0,nNumColors,ColorTab);
  	DisplayPalette(ColorTab,nNumColors,nWidth+20,20,10,10);
}

⌨️ 快捷键说明

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