Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180827
  • 博文数量: 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()函数的时候,就是失败,后来直接读一个写一个才发现,原来是自己的空格的习惯,直接在盘符的前面打了一个空格,呜,弄了我半个多小时啊,太惨了!
阅读(24921) | 评论(10) | 转发(0) |
0

上一篇:VIM使用手册

下一篇:关于vector的复制

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

chinaunix网友2009-06-09 17:23:43

博主,我在编译一个工程时,总是报错error C2383: 'FI_AllocateProc' : default-arguments are not allowed on this symbol,不知这是怎么回事,希望博主帮我看看,谢谢

whurs2008-05-23 13:42:01

可以直接在project->AddToProject->Files添加,是一样的 然后你把dll放到DEBUG目录下 把include放到你工程的文件夹下就ok了

chinaunix网友2008-05-20 20:21:24

弄了很久终于弄懂了: 将FreeImage.dll放在vc安装文件夹的Bin文件夹中 将FreeImage.h放在vc安装文件夹的Include文件夹中 将FreeImage.lib放在vc安装文件夹的LIB文件夹中 然后在需要调用FreeImage库的.C文件中进行如下声明: #include"FreeImage.h" #pragma comment(lib,"FreeImage.lib") 这样设置后程序就可以运行了。唉,本人实在菜0(^^)0

chinaunix网友2008-05-20 16:02:44

我在网上下载了graphicsuite_src.zip,从中找到了Freeimage文件夹,里边有以下三个文件:FreeImage.dll,FreeImage.dib,FreeImage.h .我也把你的以上程序写在了VC6.0上,但最后不能运行。请问下载下来的那三个文件应该放在哪些文件夹下?VC中要怎样设置?我会一直关注你的博客的。我的QQ:421595700 email:007.wu.love@163.com 很希望得到你的帮助

chinaunix网友2008-05-20 15:20:25

请问有没有关于Freeimage的使用手册之类的教材啊 我不会用Freeimage 我的QQ:421595700 email:007.wu.love@163.com 很希望得到你的帮助