資源簡介
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<<“l(fā)oad?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< //}
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格式轉(zhuǎn)換成bmp
評論
共有 條評論