说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

ImageStone图像处理C++类库

HTML文档下载 WORD文档下载 PDF文档下载
ImageStone是一个功能强大的图像处理C++类库。它采用纯C++编写,接口简单。功能包括:加载、保存(JPG格式,BMP,GIF,PNG,TIFF,ICO图标,TGA,PCX,PSD)、显示,直方图,撤销(undo)/重做(redo),超过100个图像特效。


作者:crazybit

 

介绍

ImageStone是一个功能强大的图像处理C++类库。它采用纯C++编写,接口简单。功能包括:加载、保存(JPG格式,BMP,GIF,PNG,TIFF,ICO图标,TGA,PCX,PSD)、显示,直方图,撤销(undo)/重做(redo),超过100个图像特效。

 

许可

 

ImageStone是免费的。使用代码无论用在什么地方都行(商业的也可以),只要你不声称它是你自己的。(如果你将它用在你的产品中,我希望你能通知我。)

 

使用ImageStone

这是非常容易的。所有你需要做的就是在您的源代码的开头添加#include "ImageStone.h"。如果您使用的是一个MFC项目ImageStone,只需要在StdAfx.h里添加该行。

 

最基本和最重要的类是FCObjImage。了解如何使用它。

 

在任意操作系统中加载、保存图像文件

 

// for Windows : ImageStone uses GDI+ to load/save image,//               Jpg/Png/Gif/Bmp/Tga/Tif be supported// for Linux : Only Bmp/Tga are supported, but you can set//             FreeImage handler to support more.FCObjImage   img ;img.Load ("test.jpg") ;if (!img.IsValidImage()){   assert(false) ;   return false ;} // print image's information : width, height, bit per pixelprintf ("image's width : %d",  img.Width()) ;printf ("image's height : %d", img.Height()) ;printf ("image's bpp : %d",    img.ColorBits()) ; // Load/Save function determine image's format by file's ext name// save image as jpeg file, its quality set 90 (ranges from 1 to 99)img.Save ("save.jpg", 90) ;img.Save ("save.png") ;img.Save ("save.tif") ; // Another way to set qualityFCImageProperty   prop ;prop.SetPropertyValue (IMAGE_TAG_JPEG_QUALITY, "90") ;img.Save ("save.jpg", prop) ;

在任意操作系统中从内存加载图像

 

// Load image into memorychar   * p = 0 ;int    n = 0 ;FCOXOHelper::LoadFileToBuffer ("test.jpg", p, n) ; FCObjImage   img ;img.Load (p, n, IMG_JPG) ; delete[] p ; // this line demonstrates how to determine the image's format by// the file's ext nameIMAGE_TYPE  t = FCObjImage::GetImageHandleFactory()->   QueryImageFileType("test.jpg");

在任意操作系统中从DIB流中加载图像

 

// Load image into memorychar   * p = 0 ;int    n = 0 ;FCOXOHelper::LoadFileToBuffer ("test.bmp", p, n) ;p += sizeof(BITMAPFILEHEADER) ; // now p points to a DIB streamFCObjImage   img ;img.LoadDIBStream (p, n) ; delete[] p ;

Windows中从资源加载图像

 

// Load image from local exe fileFCObjImage   img ;FCWin32::LoadImageRes (img, MAKEINTRESOURCE(nID), TEXT("JPG"),                       IMG_JPG) ; // Load image from DLL's resourceHMODULE   hDll = LoadLibrary (TEXT("ResDll.dll")) ;FCWin32::LoadImageRes (img, MAKEINTRESOURCE(nID), TEXT("JPG"),                       IMG_JPG, hDll) ; // Load image from standard BITMAP resourceFCWin32::LoadImageBitmapRes (img, MAKEINTRESOURCE(nID));

通过FreeImage库加载/保存图像

 

// change to FreeImage library to load/save image// for more detail, refer to example 005FCObjImage::SetImageHandleFactory (new FCImageHandleFactory_FreeImage) ;img.Load ("test.jpg") ; // change to GDI+ load/save imageFCObjImage::SetImageHandleFactory (new FCImageHandleFactory_Gdiplus) ;img.Load ("test.jpg") ;

结合ImageHandleFactory

 

// use FreeImage to load/save PSD/PCX imageclass CMyImageFactory : public FCImageHandleFactory{protected:   virtual FCImageHandleBase* CreateImageHandle (IMAGE_TYPE imgType)   {      switch (imgType)      {         case IMG_BMP : return new FCImageHandle_Bmp ;         case IMG_TGA : return new FCImageHandle_Tga ;         case IMG_JPG : return new FCImageHandle_Gdiplus ;         case IMG_GIF : return new FCImageHandle_Gdiplus ;         case IMG_TIF : return new FCImageHandle_Gdiplus ;         case IMG_PNG : return new FCImageHandle_Gdiplus ;         case IMG_PCX : return new FCImageHandle_FreeImage ;         case IMG_PSD : return new FCImageHandle_FreeImage ;      }      return 0 ;   }   // protected avoid user delete object.   virtual ~CMyImageFactory() {}}; // use our custom factory to read/write imageFCObjImage::SetImageHandleFactory (new CMyImageFactory) ;FCObjImage   img ;img.Load ("test.jpg") ;

加载多帧GIF

 

FCObjMultiFrame   img ;img.Load ("test.gif") ;img.GetFrame(0)->Save ("001.jpg") ;img.GetFrame(1)->Save ("001.jpg") ;

得到jpeg的EXIF信息

 

FCObjImage        img ;FCImageProperty   prop ;img.Load ("test.jpg", &prop) ; // get camera's ISO speedstd::string   m = prop.QueryPropertyValue (IMAGE_TAG_EXIF_ISOSpeed) ;// get camera's equip modelstd::string   n = prop.QueryPropertyValue (IMAGE_TAG_EquipModel) ;

在Windows环境下绘制图像对象

 

FCObjImage   img ;// capture current screenRECT         rc = {0, 0, GetSystemMetrics(SM_CXSCREEN),                         GetSystemMetrics(SM_CYSCREEN)} ;FCWin32::CaptureScreen (img, rc) ; // Draw image (no stretch) where top-left at (0,0) of hdcFCWin32::DrawImage (img, hdc, 0, 0) ; // Stretch image on region of hdcRECT     rcOnDC = {100, 100, 200, 200} ;FCWin32::DrawImage (img, hdc, rcOnDC) ; // Stretch image on central of hdc's region and keep image's aspectFCWin32::DrawImageAspect (img, hdc, rcOnDC) ; // Stretch region of image on region of hdcRECT     rcImg = {20, 20, 50, 50} ;FCWin32::DrawImage (img, hdc, rcOnDC, rcImg) ;

复制/粘贴图像到剪切板

 

FCObjImage   img ;img.Load ("test.jpg") ; // copy image to ClipboardFCWin32::CopyToClipboard (img) ; // get image on ClipboardFCWin32::GetClipboardImage (img) ;

GDI HBITMAP和FCObjImage之间的转换

 

// create HBITMAP from FCObjImage objectFCObjImage   img ;img.Load ("test.jpg") ;HBITMAP   h = FCWin32::CreateDDBHandle (img) ; // create FCObjImage object from HBITMAPFCWin32::CreateImageFromDDB (h, img) ;

GDI+ 位图和FCObjImage之间的转换

 

// create GDI+ Bitmap from FCObjImage objectFCObjImage   img ;img.Load ("test.jpg") ;Gdiplus::Bitmap   * pBmp = FCWin32::GDIPlus_CreateBitmap(img) ;delete pBmp ; // create FCObjImage object from GDI+ BitmapFCWin32::GDIPlus_LoadBitmap (*pBmp, img) ;

图像处理

 

FCObjImage   img ;img.Load ("test.jpg") ; // resize (smooth) imageimg.Stretch (nWidth, nHeight) ;img.Stretch_Smooth (nWidth, nHeight) ; // Use SinglePixelProcessProc interface to process image.// There are over 100 pre-implemented effects;// please refer to class derived from FCInterface_PixelProcessFCPixelRotate   aCmd (37) ;img.SinglePixelProcessProc (aCmd) ; FCPixelBrightness   aCmd (150) ;    // 150%img.SinglePixelProcessProc (aCmd) ; FCPixelMosaic   aCmd(5) ;img.SinglePixelProcessProc (aCmd) ; FCPixelOilPaint   aCmd (3) ;img.SinglePixelProcessProc (aCmd) ;

自定义图像处理

 

// our processor : change pixel's RGB valueclass CMyPixelProcessor : public FCSinglePixelProcessBase{public:   CMyPixelProcessor (int nR, int nG, int nB) : m_R(nR), m_G(nG),                                                m_B(nB) {}private:   virtual void ProcessPixel (FCObjImage* pImg, int x, int y,                              BYTE* pPixel)   {      PCL_B(pPixel) = FClamp0255 (PCL_B(pPixel) + m_B) ;      PCL_G(pPixel) = FClamp0255 (PCL_G(pPixel) + m_G) ;      PCL_R(pPixel) = FClamp0255 (PCL_R(pPixel) + m_R) ;   }   int   m_R, m_G, m_B ;}; // this class has the same function to upper class,// but implements other classclass CMyImageProcessor : public FCPixelWholeImageBase{public:   CMyPixelProcessor (int nR, int nG, int nB) : m_R(nR), m_G(nG),                                                m_B(nB) {}private:   virtual void ProcessWholeImage (FCObjImage* pImg,                                   FCObjProgress* pProgress)   {      for (int y=0 ; y < pImg->Height() ; y++)      {         for (int x=0 ; x < pImg->Width() ; x++)         {            BYTE   * p = pImg->GetBits(x,y) ;            PCL_B(p)   = FClamp0255 (PCL_B(p) + m_B) ;            PCL_G(p)   = FClamp0255 (PCL_G(p) + m_G) ;            PCL_R(p)   = FClamp0255 (PCL_R(p) + m_R) ;         }         if (pProgress)            pProgress->SetProgress (100 * y / pImg->Height()) ;      }   }    int   m_R, m_G, m_B ;}; // use our custom processorFCObjImage   img ;img.Load ("test.jpg") ; CMyPixelProcessor   aCmd (20, 20, 20) ;img.SinglePixelProcessProc (aCmd) ; CMyImageProcessor   aCmd (20, 20, 20) ;img.SinglePixelProcessProc (aCmd) ;

添加文字到图像

 

FCObjImage   img ;img.Load ("c:\\test.jpg") ; // now we create text layerFCObjTextLayer   imgT ;PACK_TextLayer   tp ;tp.m_bAddShadow   = false ;tp.m_bAntiAliased = true ;tp.m_bBold        = true ;tp.m_bItalic      = true ;tp.m_crFont       = PCL_RGBA(0,0,255) ;tp.m_nFontSize    = 128 ;tp.m_strFace      = "Arial" ;tp.m_strText      = "Hello" ;FCWin32::CreateTextLayer_GDIPlus (imgT, tp) ; // Now we have created a text image. Additionaly,// we can add some affect to it, such as gradient colorPOINT                 pt1={0,0}, pt2={0,50} ;FCPixelGradientLine   aCmd (pt1, pt2, PCL_RGBA(0,0,255),                            FCColor::crWhite()) ;imgT.SinglePixelProcessProc (aCmd) ; // blend text layer on imageRECT   rc = {0, 0, imgT.Width(), imgT.Height()} ;img.AlphaBlend (imgT, rc, rc, 100) ;

下载源代码:http://www.okbase.net/file/item/2994

提供“一站式”整合服务 友盟正式推出消息推送平台 iOS 8新功能再曝光:或推出分屏多任务功能 Framer:开源原型设计工具,巨头们的心头好 亚特兰大峰会精彩看点:软件吞噬世界,OpenStack是变革核心 数据中心基础设施是大数据战略成败的关键 实时大数据分析:网络分析的一种新方法 最新消息:iPhone 6将采用更大、更清晰的1704x960分辨率屏幕 吴毅挺:OpenStack是开源IaaS平台大势所趋的集大成者 做好扁平化设计-交互篇 狙击Google Glass?三星将推基于Tizen系统的Gear Glass GamePlay:跨平台开源3D游戏引擎,黑莓的努力你不懂 “少即是多” 高通QRD大会精华汇总 天云盾:构筑在云端的Web安全防护 解析大数据时代的数据库集群技术 莫里航海图,最早的大数据实践 弥补空缺!HappyFox面向iOS开发者发布开源移动HelpDesk SDK Chitika北美网络流量报告:WP KO黑莓、iOS超Android 《近匠》秦时明月:知名IP光环下的生存之道 微软研究院正式发布编程学习游戏Code Hunt 走近讲师:Memblaze刘爱贵讲述云计算中的闪存应用 【云先锋】ClouDil云方案:PB级大数据解决方案 一周消息树:这是要“发”啊?Google Brain之父正式加盟百度 最受欢迎的游戏引擎集结号:小白篇 多盟总设计师邢开捷:四两设计拨千金 Cocos2d-x游戏《Monster Strike》终结《智龙迷城》霸榜神话 高通物联网技术解决方案:从汽车到智慧城市 Arduino携手Atmel 发布Arduino Zero开发板 以色列玫瑰:细数十位科技创新领域的女性佼佼者 8款最佳的开源在线学习CMS系统 在发布站点前,Web开发者需要关注哪些技术细节? TOCC、中航信、高德、北斗平台重磅专家登场 邀您共享ITS技术盛宴 ListView Report styte,想在一个item的一个subtiem里显示check标志? 关于图片的问题,小意思?不看后悔 按试用期的工资算,年薪70000,在上海算个什么水平 拿位大侠有开发web手机短信平台经验。 请问那里可以找到学习C++Builder5做数据库方面的资料,我要基础一点的,谢谢! 高分征答:“停用了‘调用取消’”是什么错误? 如何得到本机上的OUTLOOK的帐号的EMAIL地址? 大家骂来骂去不爽~~~~ 我转两个笑话吧~~~~ ###Profiles使Powerbuilder与后台数据库联系起来。根据数据访问的不同,Profiles应用的接口又分为那两类?### EVC中的CFileDialog怎么不能选择文件啊? 备份数据日志时出现下面提示.请高手指教 对《程序员》的建议,大家都来说说!!! 100分!!!!!在Win32中用那个函数可以打开指定的字符文件,如指定code.out,怎样打开????? 安装VS.NET失败,不想重装系统,怎么回事? 如何退定CSDN的邮件? 救命啊!小弟遇到一个非常奇怪的问题 请问,delphi6的中文版有吗? 请问目前比较流行的数据库对中文表及中文段的支持情况 薪水问题求教 VB调用动态链接库的问题,HELP! 高分求教,MyODBC!!!!!!!!!!!!!!!!!! vc++ 写了一个vb控件,如何让客户端打包下载 关于如何在linux下运行xml的程序的问题 急!请问那为大虾知道wast这个软件啊? 求救:用VC怎么调试程序(怎样设断点) 各位高手:>>>送分问题.....谢谢!! 关于安装程序.... 在Form上放一个Memo,响应Form的onMouseMove时,为什么在Memo上移动鼠标,事件中的传递的参数Sender总是Form而不是Memo? tc++中怎样使用bitmap 送分了!! bcb报表中只有richedit可以自动折行,如何解决? 如何把asccii字符串转化为unicode形式的字符串??? 高手请帮帮我吧 打印RichTextBox 的内容时,如何设置页边距? 可变参数的函数 想找个老师帮我提高 要做一个dll需要在不同的平台调用该如何声明? 硬盘分区表是哪个文件? 我准备写篇有关软件企业的管理的文章,谁愿提供建议和材料,谢谢! 急!如何在VB中控制扫描仪,并按要求取得图象? 高手请指点 [给分]请global_boy(准备蒸发)进来领分!帮助解决Win2000启动选项的配置..原贴:http://www.csdn.net/expert/topic/592/592163.xml?temp= 请教高手!如何通过文件名获得其图标 MCSE?! 数据连接错误? 如何让datagrid绑定数据 ISAPI程序里输出的网页无法显示,大家救命! 请问如何在Jb6中使用中文字体,比如说宋体 HTTP 和 FTP 一个黑客问题? 一微笑面对生活作文600字 小芳读一本故事书,第一天读了这本书1/6还多6页,第2天读了这本书的1/8少8页,最后还剩172也没读,这本故事书一共多少页? 哪里可以下载考托福的听力 刘老师批改98篇作文,第二天批改了20篇,比第一天多批改了8篇,还有多少篇没有批改? 一本故事书,小芳第一天看了全书的6分之2,第二天看了全书的6发分之3,这本书共有54页如果第三天看完这本书,第三天要看全书的几分之几? 以误区为题目的作文 300字 文言文怎么形容领导对下属的恩情? 小芳读一本故事书,第一天读了全书的三分之一,第二天读了剩下的三分之一,这时还有24页没读,求全书多少页要用方程,感激不敬 以‘我喜爱的植物’为题目的300字作文 作文:微笑面对生活 演讲稿 600字以上 感恩母爱作文800字 关于手机的说明文,要一篇作文,500字要联想手机的,自己找图,最好是E268的 李老师批改48本作文,第一天批改了8分之1,第二天批改了总数的6分之1,还剩多少本 请 高级经理 六级 "游在脸盆里的鱼" 进来下能透露你的联系方式给我吗?不过不是在这里请回复 竞选班长发言稿400字左右 什么的恩情(要组词) 考托福练听力,泛听听什么? 小学五年级竞选班长演讲稿(400字)400字急 1.( )我的作文水平很差,( )这并不影响我对文学的爱好.2.李老师批改作业,( )一个错误的标点符号,在(接上句)他深度的近视下( )不会放过.3.( )我是第一次参赛,( )心里比谁都高兴.4. 还有最后五天就考托福了,能不能只练单词和听力?发现我在阅读和听力的过程中,阅读里有好多单词我能读出来,很熟悉,听力里面也是,对话还好,lecture里面就有太多单词不是连读或我自己发音 求:一篇竞选班长的演讲稿,400—500字就行了.要写出初中的水平,文章语句稍稍华丽一些,但也不能过于华丽,要有真实感、贴切生活一些.要写出自己有哪些资格竞选班长:竞选成功后该怎么做 1.李老师要批改46篇作文,现已批改了14篇,剩下的如果每小时批改8篇,还需要多少小时才能批改完?用方程! 美国第16任总统林肯说过的名言3句要经典的! 竞选班长的发言稿400字我有急用 以歌颂祖国为题的演讲稿(600字) 写老师作文.500字.快. 兔妈妈采了168个蘑菇,是小兔采的蘑茹的12倍,小兔比妈好少采几个蘑菇? 求歌颂祖国,赞美祖国的文章(演讲稿),要自创的! 林肯的名言有哪些 我的班长(初一作文) 写小学的班长 500字以上(也不要写太多了) 不是说我想竞选班长,是写人的. 作文 :青春赞歌、向世界宣言、我长大了这些的作文 有关青春随想的 谁能告诉我一些, 星期六,小丽替妈妈做午饭,所用时间如下:洗菜3分钟,洗锅2分钟,洗米2分钟,煮饭15分钟,炒菜6分钟,小丽做好中午饭至少要多少时间? 小明把吃剩的馒头随手丢在路上,看到这种情况,你会怎样对他说呢?今天答要3、4句话 关于小狗的说明文500字 狗说明文作文400字 还有两个月,要考托福了,听力愁人啊,怎么练啊,听VOA一句句写,每天至少听多少啊?坚持了一个月为什么还没效果,longman听力专项的书做了一半了....效果也不大啊.. 如何用实际行动感恩母爱是爱作文 数学:小红的身高大约是1.5m,小丽的身高大约是1.50m,谁的身高范围大?她们至少有多高?请详细回答 五年级说明文介绍水果600左右(一种) 求英语作文求职信一封… 50~80单词 具体见图…求英语作文求职信一封…50~80单词具体见图… 小红的身高大约是1.5m,小丽的身高大约是1.50m,她们谁的身高范围大? 以今天我发现( )为题-作文300字左右 大学英语作文:写一封求职信!先谢谢大家了!假如你是南京大学营销学生专业的毕业生,叫王海.从报纸上得知一家公司在招聘销售人员.请你写一封求职信,内容包括:1简单介绍自己的情况 2表示 致游在脸盆里的鱼But Pitt has struck some sour notes.我的书中对这句给了注解,说是Pitt的言语中带有敌意,我拿出来说说,你考量考量还有His preference for quiet diplomacy over noisy activism 这个over在这里怎么 介绍一种物体(800字)最好是说明文 最好是水果文具也可以 求一篇英语作文 写一篇求职信张亚丽,女,现年22岁,2008年6月毕业于北京外国语大学英语系,获得文学学士学位,擅长翻译并做过兼职翻译工作.现得知贵公司招聘英语翻译员,特求此职位. 致游在脸盆里的鱼和evillily小妹By contrast,Pitt,a longtime top defence lawyer for individuals and companies fighting the SEC,is reaching out with initiatives long sought by two groups of key Levitt(Levitt ,前SEC主席,Pitt的前任) antago 求一篇500字水果的说明文. 描写狗的说明文,600字左右, 一篇关于捡到钱包然后又送还失主的英语作文 三、选择(8分) 1.下面的分数可以用百分数表示的是( ). A.小丽一步约走54米 B.大牛比小牛多53 C.一三、选择(8分) 1.下面的分数可以用百分数表示的是( ). A.小丽一步约走54米 B. 写狗的说明文500字左右 林肯的经典名言有哪些? 求一篇说明文(用上一些说明方法)谢谢!450字左右!最好是说水果,蔬菜,或是手机啊! 长征经过多少个大河 关于林肯的名言 小丽家距离学校大约有780米上学每分钟走65米星期一早上7;05从家出发什么时间到校 形容有恩情就一定会回报的词语 英语翻译庄子与惠子游于濠梁之上,庄子曰:条鱼出游从容,是鱼之乐也,惠子曰:子非鱼,安知鱼之乐?庄子曰:子非我,安知我不知鱼之乐?惠子曰:我非子,固不知子矣,子固非鱼也,子之不知鱼之 如何提高听力,我要考托福.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘