资源简介
opengl 使用 freeimage 读取 图像到 纹理 和 存储图像到 文件的一个类的小例子

代码片段和文件信息
#include “image.h“
#include
using namespace std;
#pragma comment(lib “FreeImage.lib“)
Image::Image(void)
{
bitmap=NULL;
textureName=0;
}
Image::~Image(void)
{
if (bitmap!=NULL) FreeImage_Unload(bitmap);
}
bool Image::allocate(int w int h)
{
if (bitmap!=NULL) FreeImage_Unload(bitmap);
bitmap=NULL;
bitmap= FreeImage_Allocate(w h 32);
width=w;
height=h;
if (!bitmap) return true; else return false;
}
bool Image::save_to_file(char *filename)
{
if (FreeImage_Save(FIF_BMPbitmapfilename0) ) return true; else return false;
}
bool Image::load_from_file(char * filename)
{
this->filename = string(filename);
FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
FIBITMAP *dib(0);
BYTE* bits(0);
fif = FreeImage_GetFileType(filename 0);
fif = FreeImage_GetFileType(filename 0);
if(fif == FIF_UNKNOWN)
fif = FreeImage_GetFIFFromFilename(filename);
if(fif == FIF_UNKNOWN)
return false;
if(FreeImage_FIFSupportsReading(fif))
dib = FreeImage_Load(fif filename);
if(!dib)
return false;
bits = FreeImage_GetBits(dib);
width = FreeImage_GetWidth(dib);
height = FreeImage_GetHeight(dib);
if((bits == 0) || (width == 0) || (height == 0))
{
FreeImage_Unload(dib);
return false;
}
FREE_IMAGE_TYPE type;
type=FreeImage_GetImageType(dib);
RGBQUAD * pal = FreeImage_GetPalette(dib) ;
unsigned int bpp;
bpp= FreeImage_GetBPP( dib ) ;
unsigned red_mask green_mask blue_mask ;
red_mask = FreeImage_GetRedMask ( dib ) ;
green_mask = FreeImage_GetGreenMask ( dib ) ;
blue_mask = FreeImage_GetBlueMask ( dib ) ;
cout<
bitmap= FreeImage_ConvertTo32Bits(dib);
//FreeImage_Invert(bitmap);
cout<<“load successful “<
red_mask = FreeImage_GetRedMask ( bitmap ) ;
green_mask = FreeImage_GetGreenMask ( bitmap ) ;
blue_mask = FreeImage_GetBlueMask ( bitmap ) ;
cout< //for (int i=0; i<100; i++)
//{
// cout<< unsigned int (bits2[i])<<‘ ‘;
//}
return true;
}
bool Image::initTexture()
{
textureName=0;
glGenTextures(1 &textureName);
if (textureName==0)
{
cout<< “ init texture ERROR!!!“ < return false;
}
glBindTexture(GL_TEXTURE_2D textureName);
glTexParameteri(GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_LINEAR);
BYTE* bits(0);
bits= FreeImage_GetBits(bitmap);
width= FreeImage_GetWidth(bitmap);
height= FreeImage_GetHeight(bitmap);
glTexImage2D(GL_TEXTURE_2D 0 GL_RGBA width height
0 GL_RGBA GL_UNSIGNED_BYTE bits);
cout<< “ init texture success “ < return true;
}
void Image::draw(float left float right float bottom float top)
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3294 2009-11-26 12:31 image.cpp
文件 1519 2009-11-26 12:30 image.h
----------- --------- ---------- ----- ----
4813 2
- 上一篇:破解版TinyPDF
- 下一篇:vc图像编程:jpeg格式转换成bmp
相关资源
- OpenGL参考手册
- Qt Creator opengl实现四元数鼠标控制轨迹
- OpenGL文档,api大全,可直接查询函数
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- OPENGL实现世界上最小的3D游戏
- VS2012OpenGL配置所需要的全部libdllh文件
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- opengl游戏编程徐明亮版(含源码)
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- OpenGL绘制可运动自行车源程序.zip
- OpenGL实现飘动效果
- opengl室内场景的绘制,包括碰撞检测
评论
共有 条评论