FreeImage是按GPL和FIPL发行的自由软件。目前支持26种图像格式,如bmp,jpeg,gif,png,tiff等等。可以在Windows, Linux or Mac OS X 平台上面使用。
要使用FreeImage当然我们首先包含其头文件。
#include "FreeImage.h"
然后在工程的附加依赖项中添加 FreeImage.lib
使用FreeImage加载纹理的代码如下:
const char textName[64] = ".\\woodfloor.tga";
// 获得图像文件的类型
FREE_IMAGE_FORMAT fifmt = FreeImage_GetFileType(textName, 0);
// 加载此文件
FIBITMAP *dib = FreeImage_Load(fifmt, textName,0);
// 对于不是24位的图片,强制转换成24位 , RGB
dib = FreeImage_ConvertTo24Bits(dib);
if( dib != NULL )
{
glGenTextures( 1, &g_textureID );
glBindTexture( GL_TEXTURE_2D, g_textureID );
glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR );
//为纹理数据分配空间
BYTE *bits = new BYTE[FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib) * 3];
//获得纹理数据的指针
BYTE *pixels = (BYTE*)FreeImage_GetBits(dib);
//图像文件的储存顺序是 BGR, 我们需要把它转换成RGB来生成纹理。
for(int pix=0; pix {
bits[pix*3+0]=pixels[pix*3+2];
bits[pix*3+1]=pixels[pix*3+1];
bits[pix*3+2]=pixels[pix*3+0];
}
//创建纹理
glTexImage2D( GL_TEXTURE_2D, 0, 3, FreeImage_GetWidth(dib), FreeImage_GetHeight(dib), 0,
GL_RGB, GL_UNSIGNED_BYTE, bits );
//释放
FreeImage_Unload(dib);
delete bits;
}