FreeImage通用图像加载实现

    xiaoxiao2025-08-09  6

    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);

     

    最新回复(0)