📄 image.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 + -