📄 iprocesspview.cpp
字号:
// 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 + -