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

📄 image.cpp

📁 一个国人自己实现图像库的程序(有参考价值)
💻 CPP
字号:
#include "stdafx.h"
#include "..\..\Include\Pic\Image.h"
#include "..\..\Include\FileFind.h"
#include "..\..\Include\C_File.h"

//===================================================================
void  FCImage::GetImageInfo (PCTSTR szFileName, FPICINFO * PicInfo)
{
	if (PicInfo == NULL)
		return ;
	ZeroMemory (PicInfo, sizeof(FPICINFO)) ;

	BYTE			* pStart = NULL ;
	HANDLE			hMap = NULL ;
	HANDLE			hFile = INVALID_HANDLE_VALUE ;
	__try
	{
		//	映射文件
		pStart = this->__fooImageReadFile (szFileName, &hFile, &hMap) ;
		if (pStart == NULL)
			__leave ;

		//	判断是否为BMP格式
		if ((pStart[0] == 0x42) && (pStart[1] == 0x4D))
			if ((pStart[14] == sizeof(BITMAPINFOHEADER)) || (pStart[14] == sizeof(BITMAPV4HEADER)) || (pStart[14] == sizeof(BITMAPV5HEADER)))
			{
				BITMAPV4HEADER	* dibinfo = (BITMAPV4HEADER *) (pStart + 14) ;
				if ((dibinfo->bV4Width > 0) && (dibinfo->bV4Height > 0)
					&& (dibinfo->bV4BitCount > 0) && (dibinfo->bV4BitCount <= 32))
				{
					PicInfo->dwWidth = dibinfo->bV4Width ;
					PicInfo->dwHeight = dibinfo->bV4Height ;
					PicInfo->wBitCount = dibinfo->bV4BitCount ;
					PicInfo->dwImageType = IMAGE_BMP ;
					PicInfo->wTotalFrame = 1 ;
				}
				__leave ;
			}

		//	判断是否为GIF格式
		if ((_memicmp (pStart, "GIF87a", 6) == 0) || (_memicmp (pStart, "GIF89a", 6) == 0))
		{
			this->__fooGifScanFile (pStart, ::GetFileSize(hFile, NULL)) ;
			PicInfo->dwWidth = this->Width() ;
			PicInfo->dwHeight = this->Height() ;
			PicInfo->wBitCount = m_pGifInfo->byBitCount ;
			PicInfo->dwImageType = IMAGE_GIF ;
			PicInfo->wTotalFrame = m_pGifInfo->wTotalFrame ;
			PicInfo->wDelayTime = m_pGifInfo->wDelayTime ;
			PicInfo->byInterlace = m_pGifInfo->byInterlace ;
			PicInfo->byTransFlag = m_pGifInfo->byTransFlag ;
			__leave ;
		}

		//	判断是否为PCX格式
		if ( (pStart[0] == 0x0A) && (pStart[1] <= 5) &&
			 (pStart[2] == 1) && (pStart[3] <= 8) )
		{
			PicInfo->dwWidth = *(WORD*)(pStart + 8) - *(WORD*)(pStart + 4) + 1 ;
			PicInfo->dwHeight = *(WORD*)(pStart + 0x0A) - *(WORD*)(pStart + 6) + 1 ;
			PicInfo->wBitCount = *(pStart + 3) * *(pStart + 0x41) ;
			PicInfo->dwImageType = IMAGE_PCX ;
			PicInfo->wTotalFrame = 1 ;
			__leave ;
		}
	}
	__finally
	{
		this->__fooImageUnmapFile (pStart, hMap, hFile) ;
	}
}
//===================================================================

int  FCImage::ImageType (PCTSTR szFileName)
{
	TCHAR	szExt[_MAX_EXT] ;
	_splitpath (szFileName, NULL, NULL, NULL, szExt) ;

	if ((lstrcmp (CharLower (szExt), ".jpg") == 0) || (lstrcmp (CharLower (szExt), ".jpeg") == 0))
		return IMAGE_JPEG ;

	if (lstrcmp (CharLower (szExt), ".gif") == 0)
		return IMAGE_GIF ;

	if (lstrcmp (CharLower (szExt), ".png") == 0)
		return IMAGE_PNG ;

	if (lstrcmp (CharLower (szExt), ".bmp") == 0)
		return IMAGE_BMP ;

	if (lstrcmp (CharLower (szExt), ".pcx") == 0)
		return IMAGE_PCX ;

	if (lstrcmp (CharLower (szExt), ".tif") == 0)
		return IMAGE_TIFF ;

	if (lstrcmp (CharLower (szExt), ".tga") == 0)
		return IMAGE_TGA ;
	return IMAGE_UNKNOW ;
}

//===================================================================

BOOL  FCImage::Load (PCTSTR szFileName)
{
	switch (this->ImageType (szFileName))
	{
		case IMAGE_BMP :
			return this->LoadBmp (szFileName) ;

		case IMAGE_PCX :
			return this->LoadPcx (szFileName) ;

		case IMAGE_JPEG :
			return this->LoadJpeg (szFileName) ;

		case IMAGE_TGA :
			return this->LoadTga (szFileName) ;
		
		case IMAGE_GIF :
			return this->LoadGif (szFileName) ;

		case IMAGE_PNG :
			return this->LoadPng (szFileName) ;

		case IMAGE_TIFF :
			return this->LoadTif (szFileName) ;
	}
	return FALSE ;
}

//===================================================================

BOOL  FCImage::Save (PCTSTR szFileName)
{
	FCFileFind	fl ;
	if (fl.IsExistFile (szFileName))
	{
		::fooDelFileAttributes (szFileName, FILE_ATTRIBUTE_READONLY) ;
		::DeleteFile (szFileName) ;
	}
	switch (this->ImageType (szFileName))
	{
		case IMAGE_BMP :
			return this->SaveBmp (szFileName) ;

		case IMAGE_PCX :
			return this->SavePcx (szFileName) ;

		case IMAGE_JPEG :
			return this->SaveJpeg (szFileName) ;

		case IMAGE_TIFF :
			return this->SaveTif (szFileName) ;

		case IMAGE_TGA :
			return this->SaveTga (szFileName, true) ;

		case IMAGE_GIF :
			return this->SaveGif (szFileName, false) ;

		case IMAGE_PNG :
			return this->SavePng (szFileName, false) ;
	}
	return FALSE ;
}

//===================================================================

⌨️ 快捷键说明

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