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

📄 lcyimageprocessview.cpp

📁 用在X86芯片的,嵌入式系统中的自动更新程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -