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

📄 imagetooldoc.cpp

📁 嵌入式
💻 CPP
字号:
// ImageToolDoc.cpp : implementation of the CImageToolDoc class
//

#include "stdafx.h"
#include "ImageTool.h"

#include "ImageToolDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CImageToolDoc

IMPLEMENT_DYNCREATE(CImageToolDoc, CDocument)

BEGIN_MESSAGE_MAP(CImageToolDoc, CDocument)
	//{{AFX_MSG_MAP(CImageToolDoc)
	ON_COMMAND(ID_DITHER, OnDither)
	ON_COMMAND(ID_ROTATE_90, OnRotate90)
	ON_COMMAND(ID_ROTATE_180, OnRotate180)
	ON_COMMAND(ID_ROTATE_270, OnRotate270)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CImageToolDoc construction/destruction

CImageToolDoc::CImageToolDoc()
{
	// TODO: add one-time construction code here

	m_hBitmap = NULL;

	m_ViewSize.cx = 0 ;
	m_ViewSize.cy = 0 ;
}

CImageToolDoc::~CImageToolDoc()
{
}

BOOL CImageToolDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)


	OnOpenDocument("test.bmp");


	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CImageToolDoc serialization

void CImageToolDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CImageToolDoc diagnostics

#ifdef _DEBUG
void CImageToolDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CImageToolDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CImageToolDoc commands

BOOL CImageToolDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
	
	// TODO: Add your specialized creation code here
	
	m_hBitmap=(HBITMAP)LoadImage(NULL,lpszPathName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);

	if(m_hBitmap)
	{		
		::GetObject (m_hBitmap, sizeof(BITMAP), &m_bmif);

		m_ViewSize.cx = m_bmif.bmWidth;
		m_ViewSize.cy = m_bmif.bmHeight;			

		UpdateView();			
		
	}else
	{
		m_ViewSize.cx = 100;
		m_ViewSize.cy = 100;
	}
	
	return TRUE;
}

void CImageToolDoc::OnCloseDocument() 
{
	// TODO: Add your specialized code here and/or call the base class

	if(m_hBitmap)
	{
		::DeleteObject(m_hBitmap);
		m_hBitmap = NULL;

	}

	
	CDocument::OnCloseDocument();
}

CSize CImageToolDoc::GetViewSize()
{

	return m_ViewSize;
}




HBITMAP DitherBitmap(HBITMAP hBitmap , int nMethod ,int nBitCount);

// nMethod 1: 2: 3: 4: 5:

// nBitCount 1: 4: 8 : 16 :24 

HBITMAP	Rotate90(HBITMAP hBitmap) ;
HBITMAP	Rotate180(HBITMAP hBitmap) ;
HBITMAP	Rotate270(HBITMAP hBitmap) ;

/*

   王寒作品 ,欢迎各位高手一起交流!
   MSN:Smartvoicepro@hotmail.com
   WEB:www.i-enet.com

*/



void CImageToolDoc::OnDither() 
{
	// TODO: Add your command handler code here
	
	if(m_hBitmap)
	{
		BITMAP	bmif;
		::GetObject (m_hBitmap, sizeof(BITMAP), &bmif);
		if(bmif.bmBitsPixel != 1)
		{
			m_hBitmap = DitherBitmap(m_hBitmap,3,1);  // 根据需要调整抖动效果 nMethod 1: 2: 3: ....
			if(m_hBitmap)
			{
				UpdateView();	
			}
		}
	}



}


/*

   王寒作品 ,欢迎各位高手一起交流!
   MSN:Smartvoicepro@hotmail.com
   WEB:www.i-enet.com

*/




void CImageToolDoc::OnRotate90() 
{
	// TODO: Add your command handler code here


	if(m_hBitmap)
	{
		m_hBitmap = Rotate90(m_hBitmap);  
		if(m_hBitmap)
		{		
			::GetObject (m_hBitmap, sizeof(BITMAP), &m_bmif);
			
			m_ViewSize.cx = m_bmif.bmWidth;
			m_ViewSize.cy = m_bmif.bmHeight;			
			
			UpdateView();			
			return ;
		}
	}
	
}


/*

   王寒作品 ,欢迎各位高手一起交流!
   MSN:Smartvoicepro@hotmail.com
   WEB:www.i-enet.com

*/


void CImageToolDoc::OnRotate180() 
{

	if(m_hBitmap)
	{
		m_hBitmap = Rotate180(m_hBitmap);  
		UpdateView();				
	}

	// TODO: Add your command handler code here
	
}



void CImageToolDoc::OnRotate270() 
{
	// TODO: Add your command handler code here

	if(m_hBitmap)
	{
		m_hBitmap = Rotate270(m_hBitmap);  
		if(m_hBitmap)
		{		
			::GetObject (m_hBitmap, sizeof(BITMAP), &m_bmif);
			
			m_ViewSize.cx = m_bmif.bmWidth;
			m_ViewSize.cy = m_bmif.bmHeight;			
			
			UpdateView();			
			return ;
		}
	}
	
}

void CImageToolDoc::UpdateView()
{

	POSITION pos = GetFirstViewPosition();
	while (pos != NULL)
	{
		CScrollView* pView =(CScrollView*) GetNextView(pos);			
		pView->Invalidate();
	}   

}

⌨️ 快捷键说明

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