• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: freeimage  opengl  

资源简介

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


评论

共有 条评论