使用FreeImage库加载纹理
[ 2007-03-05 16:26:29 | 作者: Admin ]
如有转载,请注释明:
http://www.azure.com.cn/
FreeImage是按GPL和FIPL发行的自由软件。目前支持26种图像格式,如bmp,jpeg,gif,png,tiff等等。可以在Windows, Linux or Mac OS X 平台上面使用。
要使用FreeImage当然我们首先包含其头文件。 然后在工程的附加依赖项中添加 FreeImage.lib
使用FreeImage加载纹理的代码如下: www.azure.com.cn
评论Feed: http://www.azure.com.cn/feed.asp?q=comment&id=303
http://www.azure.com.cn/
FreeImage是按GPL和FIPL发行的自由软件。目前支持26种图像格式,如bmp,jpeg,gif,png,tiff等等。可以在Windows, Linux or Mac OS X 平台上面使用。
要使用FreeImage当然我们首先包含其头文件。
#include "FreeImage.h"
使用FreeImage加载纹理的代码如下:
const char textName[64] = ".\\woodfloor.tga";
// 获得图像文件的类型
FREE_IMAGE_FORMAT fifmt = FreeImage_GetFileType(textName, 0);
FIBITMAP *dib = FreeImage_Load(fifmt, textName,0);
FIBITMAP *temp = FreeImage_ConvertTo24Bits(dib);
FreeImage_Unload(dib);
dib = temp;
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<FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib); 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;
}
// 获得图像文件的类型
FREE_IMAGE_FORMAT fifmt = FreeImage_GetFileType(textName, 0);
FIBITMAP *dib = FreeImage_Load(fifmt, textName,0);
FIBITMAP *temp = FreeImage_ConvertTo24Bits(dib);
FreeImage_Unload(dib);
dib = temp;
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<FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib); 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;
}
[最后修改由 Admin, 于 2009-08-26 12:24:04]
评论Feed: http://www.azure.com.cn/feed.asp?q=comment&id=303
浏览模式: 显示全部 |
评论: 5 |
引用: 0 | 排序 | 浏览: 8710
[ 2007-03-05 23:39:37 ]
这个库还多爽的,不知道效率高不啊!
[ 2007-06-09 17:59:25 ]
请问一下,加载的纹理图象的大小有没有2的次幂的限制.
[ 2007-06-10 00:47:59 ]
没有
[ 2007-06-14 23:24:23 ]
那太好了,请问哪里能找到FreeImage.lib 和FreeImage.h,它的代码公开吗
[ 2007-07-21 10:18:13 ]
ogre的代码里也有.
此日志不可发表评论.









