Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183363
  • 博文数量: 38
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-05 19:39
文章分类

全部博文(38)

文章存档

2011年(1)

2010年(2)

2009年(2)

2008年(33)

我的朋友

分类: C/C++

2008-04-11 19:26:44

最近一段时间学习图形编程,看网上说FreeImage不错,自己down了一份,不用安装,直接使用那个什么FreeImage.h和Image.lib还有那个dll 就ok了。意见:不要用他给的那些例子。至少把我整的够呛还没弄好,直接在网上下一个graphicsuite_src.zip就ok了(非常遗憾,这个博客似乎不支持上传文件,没办法传上来)
好吧,说了那么多废话,看一个例子吧

#include
#include
#include

#define show(a) std::cout<< a <
int main(int argc,char *argv)
{
   //初始化FreeImage
   FreeImage_Initialise(TRUE);

   //默认分配一块内存存储影像,其中bpp表示图像深度
   //FIBITMAP *bitmap = FreeImage_AllocateT(FIT_BITMAP,Width,height,bpp,
   //red_mask,green_mask,blue_mask);

   //最后一个参数用来改变函数的行为或激活位图插件的一种特性,每个插件有他自己的参数集
   //FreeImage_LoadU参数都是一样,不过只在win32下起作用
   FIBITMAP * bmp = FreeImage_Load(FIF_BMP,"cs5.BMP",BMP_DEFAULT);

   //FreeImage_SaveU和上面的一样
   if( bmp)
   {
//    FreeImage_Save(FIF_BMP, bmp, "whtm.bmp", BMP_DEFAULT);
   }

   //获取影像的宽高,都以像素为单位
   int Width = FreeImage_GetWidth(bmp);
   int Height = FreeImage_GetHeight(bmp);

   //获取影像的byte宽度,不对,我上面运行与Width相等
   int ByteWidth = FreeImage_GetLine(bmp);

   //返回每个像素使用灰度值
   show(FreeImage_GetBPP(bmp));
   //返回数据类型
   show(FreeImage_GetImageType(bmp));
   //返回调色板的大小
   show(FreeImage_GetColorsUsed(bmp));

   show(Width<<" "<
//   assert(ByteWidth == Width*8 );

   show(FreeImage_GetDIBSize(bmp));

   //有调用load就有unload,否则就会内存泄漏
   FreeImage_Unload(bmp);
   FreeImage_DeInitialise();

   return 0;
}

关于在VC中调用FreeImage_Load()函数无法打开文件时,极有可能是你没有调用FreeImage_Initialise()函数,该函数在App类的In****函数中调用,上次就是因为打不开,一气之下把它全删了,后来才想起是没有调用这两个函数,唉!
在Linux编译该程序,如果你已经在默认路径下安装了,直接加上 -lfreeimageplus然后编译就ok啦

PS,今天当了回小白,唉!自己利用
FreeImage_Save()函数的时候,就是失败,后来直接读一个写一个才发现,原来是自己的空格的习惯,直接在盘符的前面打了一个空格,呜,弄了我半个多小时啊,太惨了!
阅读(25071) | 评论(10) | 转发(0) |
0

上一篇:VIM使用手册

下一篇:关于vector的复制

给主人留下些什么吧!~~

chinaunix网友2010-02-03 14:49:39

没有人发现它的内存泄漏问题吗?相当严重,一下几兆内存就没了!

chinaunix网友2010-01-27 12:05:50

sb 这么简单的一个库而已

chinaunix网友2010-01-09 15:56:24

在VC下怎么使用呢

chinaunix网友2009-09-27 18:55:59

Linking... test.obj : error LNK2001: unresolved external symbol __imp__FreeImage_DeInitialise@0 test.obj : error LNK2001: unresolved external symbol __imp__FreeImage_Unload@4 test.obj : error LNK2001: unresolved external symbol __imp__FreeImage_GetDIBSize@4 test.obj : error LNK2001: unresolved external symbol __imp__FreeImage_GetColorsUsed@4 test.obj : error LNK2001: unresolved external symbol __imp__FreeImage_GetImageType@4 test.obj : error LNK2001: unresolved external symbol __imp__FreeI

chinaunix网友2009-09-27 18:48:28

尊敬的博主你好,我仿照OpenGL的GLUT库的,将FreeImage.h放在vc安装文件夹的Include文件夹中,将FreeImage.lib放在vc安装文件夹的LIB文件夹,将FreeImage.dll放在C:\WINDOWS\system32,将你的程序#include 改成#include ,在VC6.0上测试,compile的时候没有错误,Build的时候出现12处错误,不知道什么原因!希望博主帮我分析分析,谢谢先!