1.FreeImage支持多种图片格式的处理,借用这一点可以做一个通用图像加载的东西
2.具体步骤如下:
(1).配置头文件和库
#include “FreeImage.h”
#pragma commet(lib,"FreeImage.lib"
(2).对相对路径的资源进行加载
FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; fif = FreeImage_GetFileType(ptrFileName); if(fif == FIF_UNKNOWN) { fif = FreeImage_GetFIFFromFilename(ptrFileName); } if(fif != FIF_UNKNOWN && FreeImage_FIFSupportsReading(fif)) { FIBITMAP* dib = FreeImage_Load(fif,ptrFileName,0); return dib; }(3).打开图像,
图像分为两种类型,第一种:没有调色板的图像,直接使用StretchDIBit函数绘制。第二种:使用调色板,先载入调色板,然后使用StretchDIBit函数绘制。
有调色板的图像,先要创建调色板,下面就是根据FIBITMAP创建调色板的函数:
RGBQUAD* ptrRGBTable = FreeImage_GetPalette(dib); UINT nClrUsed = FreeImage_GetColorsUsed(dib); for(UINT i=0;i<nClrUsed;i++) { palette.palPalEntry[i].peBlue = ptrRGBTable[i].rgbBlue; palette.palPalEntry[i].peGreen = ptrRGBTable[i].rgbGreen; palette.palPalEntry[i].peRed = ptrRGBTable[i].rgbRed; palette.palPalEntry[i].peFlags = 0; }(4).加载位图
FIBITMAP* dib = GenericLoader(strFileName); int width = FreeImage_GetWidth(dib); int height = FreeImage_GetHeight(dib); BITMAPINFO* pBitmapInfo = FreeImage_GetInfo(dib); BYTE* pImgData = FreeImage_GetBits(dib); RGBQUAD* pPalette = FreeImage_GetPalette(dib);