?? ydpdview.cpp
字號:
// ydpdView.cpp : implementation of the CYdpdView class
//
#include "stdafx.h"
#include "ydpd.h"
#include "ydpdDoc.h"
#include "ydpdView.h"
#include "DIB.h"
#include "Track.h"
#include "ydgj.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CYdpdView
DIB cDib;
extern HANDLE hDIBBK1;
extern HANDLE hDIBBK2;
extern HANDLE hDIBBKGray;
extern HANDLE hDIBBKGradient;
HANDLE hDIBCurrent = NULL;
CPoint ImportantPoint,ImportantPoint2,ImpPoiCur;
CPoint ImportantPointSecond;
int ImportantColorInfo[RADIUS*2+1][RADIUS*2+1][3];
int locax,locay;
IMPLEMENT_DYNCREATE(CYdpdView, CScrollView)
BEGIN_MESSAGE_MAP(CYdpdView, CScrollView)
//{{AFX_MSG_MAP(CYdpdView)
ON_COMMAND(ID_MENU_BK_FIRST, OnMenuBkFirst)
ON_COMMAND(ID_MENU_BK_SECOND, OnMenuBkSecond)
ON_COMMAND(ID_MENU_BK_GRAY, OnMenuBkGray)
ON_COMMAND(ID_MENU_GRADIENT, OnMenuGradient)
ON_COMMAND(ID_MENU_PIPEIZHONGXIN, OnMenuPipeizhongxin)
ON_COMMAND(ID_MENU_TEZHENGQUYU, OnMenuTezhengquyu)
ON_COMMAND(ID_MENU_PIPEI, OnMenuPipei)
ON_COMMAND(ID_MEDIFILTER, OnMedifilter)
ON_COMMAND(ID_MENU_FILElOAD, OnMENUFILElOAD)
ON_COMMAND(ID_MENU_YDPD_PIPEI, OnMenuYdpdPipei)
ON_COMMAND(ID_MENU_YDPD_MEDI, OnMenuYdpdMedi)
ON_COMMAND(ID_MENU_YDPD_LKTQ, OnMenuYdpdLktq)
ON_COMMAND(ID_MENU_YDPD_EDGE_GET, OnMenuYdpdEdgeGet)
ON_COMMAND(ID_MENU_YDPD_BLACKWHITE, OnMenuYdpdBlackwhite)
ON_COMMAND(ID_MENU_YDPD_THING, OnMenuYdpdThing)
ON_COMMAND(ID_MENU_YDPD_DELETESCATER, OnMenuYdpdDeletescater)
ON_COMMAND(ID_MENU_YDPD_GUIJI, OnMenuYdpdGuiji)
ON_COMMAND(ID_MENU_YDPD_CENTER, OnMenuYdpdCenter)
ON_COMMAND(ID_MENU_YCX, OnMenuYcx)
ON_COMMAND(ID_SECOND_PIPEI, OnSecondPipei)
ON_COMMAND(ID_MENU_PENGZHANG, OnMenuPengzhang)
ON_COMMAND(ID_MENU_GETEDGE, OnMenuGetedge)
ON_COMMAND(ID_MENU_YDPD_GRAY, OnMenuYdpdGray)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CYdpdView construction/destruction
CYdpdView::CYdpdView()
{
hDIBBK1 = NULL;
hDIBBK2 = NULL;
hDIBBKGray = NULL;
hDIBBKGradient = NULL;
isTeZhengZhi = false;
isBKChonsen = false;
m_Pointnum =0;
}
CYdpdView::~CYdpdView()
{
}
BOOL CYdpdView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CYdpdView drawing
void CYdpdView::OnDraw(CDC* pDC)
{
CYdpdDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(hDIBBK1 && hDIBBKGray== NULL)
cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(0,0,m_bk_first_width,m_bk_first_height),
hDIBBK1,CRect(0,0,m_bk_first_width,m_bk_first_height),SRCCOPY);
if(hDIBBKGray && hDIBBKGradient == NULL)
cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(0,0,m_bk_first_width,m_bk_first_height),
hDIBBKGray,CRect(0,0,m_bk_first_width,m_bk_first_height),SRCCOPY);
if(hDIBBKGradient)
cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(0,0,m_bk_first_width,m_bk_first_height),
hDIBBKGradient,CRect(0,0,m_bk_first_width,m_bk_first_height),SRCCOPY);
if(hDIBBK2)
{ SetScrollSizes(MM_TEXT,CSize(m_bk_first_width*2+20,m_bk_first_height*2+10));
//SetScrollSizes(MM_TEXT,CSize(m_bk_first_width*2+20,m_bk_first_height));
cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(m_bk_first_width+5,0,m_bk_first_width*2+5,m_bk_first_height),
hDIBBK2,CRect(0,0,m_bk_first_width,m_bk_first_height),SRCCOPY);
}
if(hDIBCurrent)
{
cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(m_bk_first_width+5,m_bk_first_height+5,m_bk_first_width*2+5,m_bk_first_height*2+5),
hDIBCurrent,CRect(0,0,m_bk_first_width,m_bk_first_height),SRCCOPY);
SetScrollSizes(MM_TEXT,CSize(m_bk_first_width*2+20,m_bk_first_height*2+10));
}
if(this->isTeZhengZhi)
cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(0,m_bk_first_height+10,RADIUS*2+1,m_bk_first_height+10+RADIUS*2+1),
hDIBBK1,CRect(ImportantPoint.x-RADIUS,m_bk_first_height -ImportantPoint.y-RADIUS,ImportantPoint.x+RADIUS,m_bk_first_height -ImportantPoint.y +RADIUS),SRCCOPY);
}
void CYdpdView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
/////////////////////////////////////////////////////////////////////////////
// CYdpdView printing
BOOL CYdpdView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CYdpdView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CYdpdView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CYdpdView diagnostics
#ifdef _DEBUG
void CYdpdView::AssertValid() const
{
CScrollView::AssertValid();
}
void CYdpdView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CYdpdDoc* CYdpdView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CYdpdDoc)));
return (CYdpdDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CYdpdView message handlers
void CYdpdView::OnMenuBkFirst()
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);
if(dlg.DoModal() == IDOK)
{
CString a;
a = dlg.GetPathName();
hDIBBK1 = cDib.LoadDIB(a);
if(!hDIBBK1)
{
AfxMessageBox("open file error");
return;
}
LPBITMAPINFOHEADER lpbi;
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIBBK1);
this->m_bk_first_width = lpbi->biWidth;
this->m_bk_first_height = lpbi->biHeight;
GlobalUnlock(hDIBBK1);
Invalidate();
}
}
void CYdpdView::OnMenuBkSecond()
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);
if(dlg.DoModal() == IDOK)
{
hDIBBK2 = cDib.LoadDIB(dlg.GetPathName());
if(!hDIBBK2)
{
AfxMessageBox("open file error");
return;
}
Invalidate();
}
}
void CYdpdView::OnMenuBkGray()
{
hDIBBKGray = cDib.ToGray(hDIBBK1);
Invalidate();
}
void CYdpdView::OnMenuGradient()
{
hDIBBKGradient = cDib.Gradient(hDIBBKGray);
Invalidate();
}
void CYdpdView::OnMenuPipeizhongxin()
{
cDib.LocateImporntPoint(hDIBBKGradient,RADIUS,&ImportantPoint);
Invalidate();
}
void CYdpdView::OnMenuTezhengquyu()
{
long lOffset;
WORD wBytesPerLine;
LPBYTE lpData;
GlobalLock(hDIBBK1);
wBytesPerLine = cDib.BytePerLine(hDIBBK1);
lpData = cDib.FindDIBBits(hDIBBK1);
for(int i=-RADIUS;i<=RADIUS;i++)
for(int j=-RADIUS;j<=RADIUS;j++)
{
lOffset = cDib.PixelOffset(i+ImportantPoint.y,j+ImportantPoint.x,wBytesPerLine);
ImportantColorInfo[i+RADIUS][j+RADIUS][0] = *(lpData+lOffset++);
ImportantColorInfo[i+RADIUS][j+RADIUS][1] = *(lpData+lOffset++);
ImportantColorInfo[i+RADIUS][j+RADIUS][2] = *(lpData+lOffset++);
}
this->isTeZhengZhi = true;
GlobalUnlock(hDIBBK1);
Invalidate();
}
void CYdpdView::OnMenuPipei()
{
cDib.MatchImportantPoint(hDIBBK2,ImportantColorInfo,&ImportantPoint2);
if(cDib.ComPareImg(hDIBBK1,hDIBBK2,ImportantPoint,ImportantPoint2))
{
AfxMessageBox("match successed");
this->isBKChonsen = true;
}
else
AfxMessageBox("match failed");
Invalidate();
}
void CYdpdView::OnMedifilter()
{
if(hDIBBK1)
cDib.MedianFilterDIB(hDIBBK1);
if(hDIBBK2)
cDib.MedianFilterDIB(hDIBBK2);
Invalidate();
}
void CYdpdView::OnMENUFILElOAD()
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);
if(dlg.DoModal() == IDOK)
{
CString a;
a = dlg.GetPathName();
hDIBCurrent = cDib.LoadDIB(a);
if(!hDIBCurrent)
{
AfxMessageBox("open file error");
return;
}
}
}
void CYdpdView::OnMenuYdpdPipei()
{
bool kk = cDib.MatchImportantPoint(hDIBCurrent,ImportantColorInfo,&ImportantPoint2);
if(cDib.ComPareImg(hDIBBK1,hDIBCurrent,ImportantPoint,ImportantPoint2))
{
AfxMessageBox("match successed");
this->isBKChonsen = true;
}
else
AfxMessageBox("match failed");
Invalidate();
}
void CYdpdView::OnMenuYdpdMedi()
{
if(hDIBCurrent)
{
cDib.MedianFilterDIB(hDIBCurrent);
Invalidate();
}
}
void CYdpdView::OnMenuYdpdLktq()
{
cDib.CompareImg2(hDIBBK1,hDIBCurrent,ImportantPoint,ImportantPoint2);
LPBITMAPFILEHEADER lpbi;
lpbi = (LPBITMAPFILEHEADER)GlobalLock(hDIBCurrent);
LPBYTE lpData = cDib.FindDIBBits(hDIBCurrent);
long lOffset;
WORD wBytesPerLine = cDib.BytePerLine(hDIBCurrent);
for(int i= -RADIUS;i<=RADIUS;i++)
{
lOffset = cDib.PixelOffset(i+ImportantPoint2.y,RADIUS+ImportantPoint2.x,wBytesPerLine);
*(lpData+lOffset++) = 0;
*(lpData+lOffset++) = 0;
*(lpData+lOffset++) = 0;
}
for( i= -RADIUS;i<=RADIUS;i++)
{
lOffset = cDib.PixelOffset(i+ImportantPoint2.y,ImportantPoint2.x-RADIUS,wBytesPerLine);
*(lpData+lOffset++) = 0;
*(lpData+lOffset++) = 0;
*(lpData+lOffset++) = 0;
}
for( i= -RADIUS;i<=RADIUS;i++)
{
lOffset = cDib.PixelOffset(ImportantPoint2.y-RADIUS,i+ImportantPoint2.x,wBytesPerLine);
*(lpData+lOffset++) = 0;
*(lpData+lOffset++) = 0;
*(lpData+lOffset++) = 0;
}
for( i= -RADIUS;i<=RADIUS;i++)
{
lOffset = cDib.PixelOffset(RADIUS+ImportantPoint2.y,i+ImportantPoint2.x,wBytesPerLine);
*(lpData+lOffset++) = 0;
*(lpData+lOffset++) = 0;
*(lpData+lOffset++) = 0;
}
GlobalUnlock(hDIBCurrent);
Invalidate();
}
void CYdpdView::OnMenuYdpdEdgeGet()
{
LPBITMAPINFOHEADER lpbi;
int width ,height;
WORD wBytesPerLine ;
LPBYTE lpData;
long lOffset;
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIBCurrent);
width = lpbi->biWidth;
height = lpbi->biHeight;
wBytesPerLine = cDib.BytePerLine(hDIBCurrent);
lpData = cDib.FindDIBBits(hDIBCurrent);
for(int i =0;i<height;i++)
for(int j=0;j<width;j++)
{
lOffset = cDib.PixelOffset(i,j,wBytesPerLine);
*(lpData+lOffset) =(*(lpData+lOffset))*5;
*(lpData+lOffset+1) =(*(lpData+lOffset+1))*5;
*(lpData+lOffset+2) =(*(lpData+lOffset+2))*5;
}
GlobalUnlock(hDIBCurrent);
hDIBCurrent = cDib.Gradient(hDIBCurrent);
lpData = cDib.FindDIBBits(hDIBCurrent);
for(i =0;i<height;i++)
{
lOffset = cDib.PixelOffset(i,0,wBytesPerLine);
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
}
for(i =0;i<height;i++)
{
lOffset = cDib.PixelOffset(i,width-1,wBytesPerLine);
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
}
for(i =0;i<width;i++)
{
lOffset = cDib.PixelOffset(height-1,i,wBytesPerLine);
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
}
for(i =0;i<width;i++)
{
lOffset = cDib.PixelOffset(0,i,wBytesPerLine);
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
}
Invalidate();
}
void CYdpdView::OnMenuYdpdBlackwhite()
{
cDib.WhiteBlack(hDIBCurrent,110);
LPBITMAPINFOHEADER lpbi;
int width ,height;
WORD wBytesPerLine ;
LPBYTE lpData;
long lOffset;
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIBCurrent);
width = lpbi->biWidth;
height = lpbi->biHeight;
wBytesPerLine = cDib.BytePerLine(hDIBCurrent);
lpData = cDib.FindDIBBits(hDIBCurrent);
for(int i =0;i<height;i++)
{
lOffset = cDib.PixelOffset(i,0,wBytesPerLine);
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
}
for(i =0;i<height;i++)
{
lOffset = cDib.PixelOffset(i,width-1,wBytesPerLine);
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
}
for(i =0;i<width;i++)
{
lOffset = cDib.PixelOffset(height-1,i,wBytesPerLine);
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
*(lpData+lOffset++) =0;
}
for(i =0;i<width;i++)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -