📄 lcyimageprocessview.cpp
字号:
// LCYImageProcessView.cpp : implementation of the CLCYImageProcessView class
//
#include "stdafx.h"
#include "LCYImageProcess.h"
#include "LCYImageProcessDoc.h"
#include "LCYImageProcessView.h"
#include "SuoFangDlg.h"
#include "SuoFangDlg1.h"
#include "MoveDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "PicFileDlg.h"
/////////////////////////////////////////////////////////////////////////////
// CLCYImageProcessView
IMPLEMENT_DYNCREATE(CLCYImageProcessView, CScrollView)
BEGIN_MESSAGE_MAP(CLCYImageProcessView, CScrollView)
//{{AFX_MSG_MAP(CLCYImageProcessView)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_VIEW_SRC, OnViewSrc)
ON_COMMAND(ID_T0_BOTTOM, OnT0Bottom)
ON_COMMAND(ID_TO_UP, OnToUp)
ON_COMMAND(ID_TO_RIGHT, OnToRight)
ON_COMMAND(ID_TO_LEFT, OnToLeft)
ON_COMMAND(ID_VIEW_MOVE_TOLEFT, OnViewMoveToleft)
ON_COMMAND(ID_VIEW_MOVE_TOUP, OnViewMoveToup)
ON_COMMAND(ID_KUOZHANG, OnKuozhang)
ON_COMMAND(ID_BOTH_FLY, OnBothFly)
ON_COMMAND(ID_SHOUSUO, OnShousuo)
ON_COMMAND(ID_SHUIPINGSHANTIAO, OnShuipingshantiao)
ON_COMMAND(ID_CUIZHISHANTIAO, OnCuizhishantiao)
ON_COMMAND(ID_JIANXIAN, OnJianxian)
ON_COMMAND(ID_SHUIPINGWIN, OnShuipingwin)
ON_COMMAND(ID_ZOOM, OnZoom)
ON_COMMAND(ID_ZOOM1, OnZoom1)
ON_COMMAND(ID_MOVE, OnMove)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CLCYImageProcessView construction/destruction
CLCYImageProcessView::CLCYImageProcessView()
{
// TODO: add construction code here
m_BmpImage=new CWinPic;
m_Bitmap=new CBitmap;
m_MemDC=new CDC;
m_Current=0;
}
CLCYImageProcessView::~CLCYImageProcessView()
{
delete m_BmpImage;
delete m_Bitmap;
delete m_MemDC;
}
BOOL CLCYImageProcessView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CLCYImageProcessView drawing
void CLCYImageProcessView::OnDraw(CDC* pDC)
{
CLCYImageProcessDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(m_BmpImage->m_ImageData)
{
switch(m_Current)
{
case 0: //显示原图
DrawPicture();
break;
case 11: //向下扫描
DrawPicture_bottom();
break;
case 12: //向上扫描
DrawPicture_up();
break;
case 13: //向右扫描
DrawPicture_right();
break;
case 14: //向左扫描
DrawPicture_left();
break;
case 21: //向左移动显示
DrawPicture_toleft();
break;
case 22: //向上移动显示
DrawPicture_toup();
break;
case 31:
DrawPicture_kuozhang();
break;
case 41:
DrawPicture_fly();
break;
case 51:
DrawPicture_shousuo();
break;
case 61:
DrawPicture_shuipingshantiao();
break;
case 62:
DrawPicture_cuizhishantiao();
break;
case 71:
DrawPicture_shuipingwin();
break;
default:
//DrawPicture();
break;
}
}
}
void CLCYImageProcessView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
//Call this member function to get m_hDC, the output device context
/*if(m_MemDC->GetSafeHdc()==NULL)
{
CClientDC dc(this);
OnPrepareDC(&dc);
//设定背景图象的大小
//::AfxMessageBox("mmmmmmmmmmmm");
//dc.TextOut(8,8,"hhhhhhh");
CRect rc(0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN));
m_MemDC->CreateCompatibleDC(&dc);
m_Bitmap->CreateCompatibleBitmap(&dc,rc.right,rc.bottom);
}*/
}
/////////////////////////////////////////////////////////////////////////////
// CLCYImageProcessView printing
BOOL CLCYImageProcessView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CLCYImageProcessView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CLCYImageProcessView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CLCYImageProcessView diagnostics
#ifdef _DEBUG
void CLCYImageProcessView::AssertValid() const
{
CScrollView::AssertValid();
}
void CLCYImageProcessView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CLCYImageProcessDoc* CLCYImageProcessView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLCYImageProcessDoc)));
return (CLCYImageProcessDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLCYImageProcessView message handlers
void CLCYImageProcessView::OnFileOpen()
{
// TODO: Add your command handler code here
CPicFileDlg MyFileDlg(TRUE);
MyFileDlg.m_ofn.lpstrFilter="BMP files(*.bmp)\0*.bmp\0JPEG files\0*.jpg\0";
if(MyFileDlg.DoModal()==IDOK)
{
if(m_BmpImage!=NULL)
{
delete m_BmpImage;
m_BmpImage=new CWinPic;
}
if(m_BmpImage->OpenFile(MyFileDlg.GetPathName())!=INIT_SUCCESS)
{
::AfxMessageBox("打开文件失败!文件可能损坏!");
}
m_BmpImage->LoadImageData();
}
m_Current=0;
CLCYImageProcessDoc* pDoc=GetDocument();
pDoc->UpdateAllViews(NULL);
// DrawPicture();
}
//显示位图
void CLCYImageProcessView::DrawPicture()
{
if(m_MemDC->GetSafeHdc()==NULL)
{
CClientDC dc(this);
OnPrepareDC(&dc);
//设定背景图象的大小
//::AfxMessageBox("mmmmmmmmmmmm");
//dc.TextOut(8,8,"hhhhhhh");
CRect rc(0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN));
m_MemDC->CreateCompatibleDC(&dc);
m_Bitmap->CreateCompatibleBitmap(&dc,rc.right,rc.bottom);
}
CClientDC dc(this);
//CDC* dc;
CBitmap* OldBitmap=(CBitmap*) m_MemDC->SelectObject(m_Bitmap);
//draws a rectangle
m_MemDC->Rectangle(-1,-1,2000,2000);
//Selects the given region as the current clipping region for the device context
m_MemDC->SelectClipRgn(NULL);
COLORREF colorref;
for(int i=0;i<m_BmpImage->m_BiHeight;i++)
{
for(int j=0;j<m_BmpImage->m_BiWidth;j++)
{
colorref=m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbBlue<<16 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbGreen<<8 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbRed;
//画位图中的每一个象素点
m_MemDC->SetPixel(j,i,colorref);
//dc.BitBlt(0,0,j,i,m_MemDC,0,0,SRCCOPY);
}
}
//显示函数
/*::AfxMessageBox("aaaaaaaaaaa");
CString str;
str.Format("%d",m_BmpImage->m_BiWidth);
::AfxMessageBox(str);
//::AfxMessageBox("aaaaaaaaaaa");
CString str1="hgfdsjahfsahk";
dc.TextOut(5,8,str1);*/
//Sleep(5);
dc.BitBlt(0,0,m_BmpImage->m_BiWidth,m_BmpImage->m_BiHeight,m_MemDC,0,0,SRCCOPY);
m_MemDC->SelectObject(OldBitmap);
}
void CLCYImageProcessView::OnViewSrc()
{
// TODO: Add your command handler code here
m_Current=0;
m_BmpImage->LoadImageData();
CLCYImageProcessDoc* pDoc=GetDocument();
pDoc->UpdateAllViews(NULL);
//DrawPicture();
}
void CLCYImageProcessView::OnT0Bottom()
{
// TODO: Add your command handler code here
//::AfxMessageBox("aaaa");
//m_BmpImage->LoadImageData();
//DrawPicture_bottom();
m_Current=11;
CLCYImageProcessDoc* pDoc=GetDocument();
pDoc->UpdateAllViews(NULL);
}
//从上往下扫描图象
void CLCYImageProcessView::DrawPicture_bottom()
{
CClientDC dc(this);
//CDC* dc;
CBitmap* OldBitmap=(CBitmap*) m_MemDC->SelectObject(m_Bitmap);
//draws a rectangle
m_MemDC->Rectangle(-1,-1,2000,2000);
//Selects the given region as the current clipping region for the device context
m_MemDC->SelectClipRgn(NULL);
COLORREF colorref;
for(int i=0;i<m_BmpImage->m_BiHeight;i++)
{
for(int j=0;j<m_BmpImage->m_BiWidth;j++)
{
colorref=m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbBlue<<16 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbGreen<<8 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbRed;
//画位图中的每一个象素点
m_MemDC->SetPixel(j,i,colorref);
}
dc.BitBlt(0,0,j,i,m_MemDC,0,0,SRCCOPY);
Sleep(5);
}
/*for(i=0;i<m_BmpImage->m_BiHeight;i++)
{
dc.BitBlt(0,0,m_BmpImage->m_BiWidth,i,m_MemDC,0,0,SRCCOPY);
Sleep(5);
}*/
//dc.BitBlt(0,0,m_BmpImage->m_BiWidth,m_BmpImage->m_BiHeight,m_MemDC,0,0,SRCCOPY);
m_MemDC->SelectObject(OldBitmap);
}
void CLCYImageProcessView::OnToUp()
{
// TODO: Add your command handler code here
// m_BmpImage->LoadImageData();
//DrawPicture_bottom();
m_Current=12;
CLCYImageProcessDoc* pDoc=GetDocument();
pDoc->UpdateAllViews(NULL);
}
//从下往上扫描图象
void CLCYImageProcessView::DrawPicture_up()
{
CClientDC dc(this);
//CDC* dc;
CBitmap* OldBitmap=(CBitmap*) m_MemDC->SelectObject(m_Bitmap);
//draws a rectangle
m_MemDC->Rectangle(-1,-1,2000,2000);
//Selects the given region as the current clipping region for the device context
m_MemDC->SelectClipRgn(NULL);
COLORREF colorref;
for(int i=0;i<m_BmpImage->m_BiHeight;i++)
{
for(int j=0;j<m_BmpImage->m_BiWidth;j++)
{
colorref=m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbBlue<<16 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbGreen<<8 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbRed;
//画位图中的每一个象素点
m_MemDC->SetPixel(j,i,colorref);
//dc.BitBlt(0,0,j,i,m_MemDC,0,0,SRCCOPY);
}
// dc.BitBlt(0,0,j,m_BmpImage->m_BiHeight-i,m_MemDC,0,0,SRCCOPY);
// Sleep(5);
}
//从下往上显示
for(i=m_BmpImage->m_BiHeight-1;i>=0;i--)
{
dc.BitBlt(0,i,m_BmpImage->m_BiWidth,1,m_MemDC,0,i,SRCCOPY);
//dc.StretchBlt(0,0,m_BmpImage->m_BiWidth,i,m_MemDC,0,0,m_BmpImage->m_BiWidth,1,SRCCOPY);
Sleep(5);
}
//dc.BitBlt(0,0,m_BmpImage->m_BiWidth,m_BmpImage->m_BiHeight,m_MemDC,0,0,SRCCOPY);
m_MemDC->SelectObject(OldBitmap);
}
//图象向右扫描显示
void CLCYImageProcessView::DrawPicture_right()
{
CClientDC dc(this);
//CDC* dc;
CBitmap* OldBitmap=(CBitmap*) m_MemDC->SelectObject(m_Bitmap);
//draws a rectangle
m_MemDC->Rectangle(-1,-1,2000,2000);
//Selects the given region as the current clipping region for the device context
m_MemDC->SelectClipRgn(NULL);
COLORREF colorref;
for(int i=0;i<m_BmpImage->m_BiHeight;i++)
{
for(int j=0;j<m_BmpImage->m_BiWidth;j++)
{
colorref=m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbBlue<<16 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbGreen<<8 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbRed;
//画位图中的每一个象素点
m_MemDC->SetPixel(j,i,colorref);
}
}
//向右扫描显示
for(i=0;i<m_BmpImage->m_BiWidth;i++)
{
dc.BitBlt(i,0,1,m_BmpImage->m_BiHeight,m_MemDC,i,0,SRCCOPY);
Sleep(5);
}
m_MemDC->SelectObject(OldBitmap);
}
void CLCYImageProcessView::OnToRight()
{
// TODO: Add your command handler code here
//m_BmpImage->LoadImageData();
//DrawPicture_bottom();
m_Current=13;
CLCYImageProcessDoc* pDoc=GetDocument();
pDoc->UpdateAllViews(NULL);
}
//图象向左扫描显示
void CLCYImageProcessView::DrawPicture_left()
{
CClientDC dc(this);
//CDC* dc;
CBitmap* OldBitmap=(CBitmap*) m_MemDC->SelectObject(m_Bitmap);
//draws a rectangle
m_MemDC->Rectangle(-1,-1,2000,2000);
//Selects the given region as the current clipping region for the device context
m_MemDC->SelectClipRgn(NULL);
COLORREF colorref;
for(int i=0;i<m_BmpImage->m_BiHeight;i++)
{
for(int j=0;j<m_BmpImage->m_BiWidth;j++)
{
colorref=m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbBlue<<16 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbGreen<<8 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbRed;
//画位图中的每一个象素点
m_MemDC->SetPixel(j,i,colorref);
}
}
for(i=m_BmpImage->m_BiWidth-1;i>=0;i--)
{
dc.BitBlt(i,0,1,m_BmpImage->m_BiHeight,m_MemDC,i,0,SRCCOPY);
Sleep(5);
}
m_MemDC->SelectObject(OldBitmap);
}
void CLCYImageProcessView::OnToLeft()
{
// TODO: Add your command handler code here
// m_BmpImage->LoadImageData();
//DrawPicture_bottom();
m_Current=14;
CLCYImageProcessDoc* pDoc=GetDocument();
pDoc->UpdateAllViews(NULL);
}
void CLCYImageProcessView::OnViewMoveToleft()
{
// TODO: Add your command handler code here
//m_BmpImage->LoadImageData();
//DrawPicture_bottom();
m_Current=21;
CLCYImageProcessDoc* pDoc=GetDocument();
pDoc->UpdateAllViews(NULL);
}
//向左移动显示
void CLCYImageProcessView::DrawPicture_toleft()
{
CClientDC dc(this);
//CDC* dc;
CBitmap* OldBitmap=(CBitmap*) m_MemDC->SelectObject(m_Bitmap);
//draws a rectangle
m_MemDC->Rectangle(-1,-1,2000,2000);
//Selects the given region as the current clipping region for the device context
m_MemDC->SelectClipRgn(NULL);
COLORREF colorref;
for(int i=0;i<m_BmpImage->m_BiHeight;i++)
{
for(int j=0;j<m_BmpImage->m_BiWidth;j++)
{
colorref=m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbBlue<<16 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbGreen<<8 |
m_BmpImage->m_ImageData[i*m_BmpImage->m_BiWidth+j].rgbRed;
//画位图中的每一个象素点
m_MemDC->SetPixel(j,i,colorref);
}
}
for(i=0;i<m_BmpImage->m_BiWidth;i++)
{
for(int j=0;j<m_BmpImage->m_BiHeight;j=j+8) //8-图象显示定位量
{
dc.BitBlt(0,j-8,i+1,8,m_MemDC,i,j,SRCCOPY);
//dc.StretchBlt(i,j-8,i+1,8,m_MemDC,i,j,i+1,8,SRCCOPY);
//Sleep(5);
}
Sleep(5);
}
/*for(i=m_BmpImage->m_BiWidth;i>=0;i--)
{
for(int j=m_BmpImage->m_BiHeight;j>=0;j=j-8)
{
dc.BitBlt(0,j-8,i+11,8,m_MemDC,i,j,SRCCOPY);
//dc.StretchBlt(i,j-8,i+1,8,m_MemDC,i,j,i+1,8,SRCCOPY);
//Sleep(5);
}
Sleep(5);
}*/
//dc.BitBlt(i,0,1,m_BmpImage->m_BiHeight,m_MemDC,i,0,SRCCOPY);
/*for(int i=0;i<=bitmapWidth;i++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -