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

📄 raw.cpp

📁 这是一款蛮COOL的图像处理系统
💻 CPP
字号:
// Raw.cpp: implementation of the CRaw class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "QuickImage.h"
#include "Raw.h"

#include "dlgguesswidth.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CRaw::CRaw() : CImage()
{

}

CRaw::~CRaw()
{

}

BOOL CRaw::ReadFromFile(const LPCTSTR lpszPathName)
{
	ASSERT(NULL != lpszPathName);
	
	CDlgGuessWidth dlg;
	strcpy(dlg.PATHNAME, lpszPathName);
	strcpy(dlg.TITLE, "Open Raw File:");
	dlg.m_iDepth=0;
	if(dlg.DoModal() != IDOK)
	{
		return FALSE;
	}
	m_iWidth=dlg.m_iWidth;
	m_iHeight=dlg.m_iHeight;

	strcpy(m_szPathName,lpszPathName);
	return TRUE;
}

HDIB CRaw::Show()
{
	CFile file;
	if(!file.Open(m_szPathName,CFile::modeRead | CFile::shareExclusive))
	{
		return NULL;
	}
	DWORD size=m_iWidth*m_iHeight;
	HANDLE hByte=NULL;
	BYTE* pByte=NULL;
	if((hByte=GlobalAlloc(GHND, size)) == NULL)
	{
		file.Close();
		return NULL;
	}
	if((pByte=(BYTE*)GlobalLock(hByte)) == NULL)
	{
		file.Close();
		return NULL;
	}
	if(file.Read(pByte, size) != size)
	{
		file.Close();
		GlobalUnlock(hByte);
		GlobalFree(hByte);
		return NULL;
	}
	file.Close();
	HDIB hDIB = NULL;
	BYTE *pTemp = new BYTE[m_iWidth];
	if(NULL != pTemp)
	{
		BYTE *top = pByte;
		BYTE *bottom = pByte + m_iWidth * (m_iHeight - 1);
		while(top < bottom)
		{
			memcpy(pTemp, top, m_iWidth);
			memcpy(top, bottom, m_iWidth);
			memcpy(bottom, pTemp, m_iWidth);
			top += m_iWidth;
			bottom -= m_iWidth;
		}
		delete pTemp;
		hDIB = ::GenBmp(m_iWidth, m_iHeight, 8, pByte);
	}
	try
	{
		GlobalUnlock(hByte);
		GlobalFree(hByte);
	}
	catch(CMemoryException *e)
	{
		e->ReportError();
		e->Delete();
		if(hDIB)
		{
			::DeleteObject(hDIB);
		}
		return NULL;
	}
	return hDIB;
}

BOOL CRaw::SaveRaw(const LPCTSTR lpszPathName, const HDIB hDIB)
{
	ASSERT(strlen(lpszPathName) > 0);
	ASSERT(NULL != hDIB);
	CFile file;
	CFileException fe;
	if (!file.Open(lpszPathName, CFile::modeCreate |
		CFile::modeReadWrite | CFile::shareExclusive, &fe))
	{
		return FALSE;
	}
	TRY
	{
		LPSTR lpDIB = (LPSTR)GlobalLock(hDIB);
		LPSTR lpBITs = ::FindDIBBits(lpDIB);
		int iWidth = ::DIBWidth(lpDIB);
		int iHeight = abs(::DIBHeight(lpDIB));
		BYTE *pTemp = new BYTE[iWidth];
		if(NULL != pTemp)
		{
			BYTE *top = (BYTE*)lpBITs;
			BYTE *bottom = (BYTE*)lpBITs + iWidth * (iHeight - 1);
			while(top < bottom)
			{
				memcpy(pTemp, top, iWidth);
				memcpy(top, bottom, iWidth);
				memcpy(bottom, pTemp, iWidth);
				top += iWidth;
				bottom -= iWidth;
			}
			file.Write(lpBITs,
				::DIBWidth(lpDIB) * iHeight * int(((PBITMAPINFOHEADER)lpDIB)->biBitCount / 8.0));

			top = (BYTE*)lpBITs;
			bottom = (BYTE*)lpBITs + iWidth * (iHeight - 1);
			while(top < bottom)
			{
				memcpy(pTemp, top, iWidth);
				memcpy(top, bottom, iWidth);
				memcpy(bottom, pTemp, iWidth);
				top += iWidth;
				bottom -= iWidth;
			}
			delete pTemp;
		}
		GlobalUnlock(hDIB);
		file.Close();
	}
	CATCH (CException, eSave)
	{
		file.Abort(); // will not throw an exception
		return FALSE;
	}
	END_CATCH
	// replace calls to Serialize with SaveDIB function
	return FALSE;
}

⌨️ 快捷键说明

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