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

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

独家:前RIM大中华区总经理刘征宇,加入Appconomy 用一个API搞定一切 Segment.io为移动开发者提供便利的分析数据分发服务 TIOBE 6月编程语言排行榜:JavaScript回归前十 《Kingdom Rush Frontiers》上线后 迅速抢占27个国家游戏榜首 移动周报:85后程序员,iOS开源项目,细数7天大事件! Instagram:从Redis到Cassandra 成本节省1/4 乐元素CTO凌聪访谈:游戏引擎技术选型之王道 iOS 7的新设计并非止于外表 WWDC 2013大会10大启示:正向开发者支付大量现金 云计算大会微软专场成功举办 Windows Azure公众预览版上线 IBM全球大裁员 在美国裁员已经开始 动动鼠标,决定“中国十大优秀开源项目”的归属 为改善Flickr 雅虎收购拍照应用开发商GhostBird 让你轻松学习新代码库的六个步骤 RESTful API 设计最佳实践 谷歌11亿美元豪购Waze原因:获取数据 争本地广告市场 为什么大家都要疯狂吐槽iOS 7的扁平化设计? 伟大的程序员是天生的,不是造就的 比Hive高效7倍 Facebook推新一代查询引擎Presto 未来的存储系统设计——PMC技术交流会举行 第五届中国云计算大会PPT尝鲜:十位专家分享的架构实践 “DIY”可穿戴设备:索尼开放智能手表固件 在微软的八个月里,我学到了这些 谷歌实习生每月都拿$6000,你呢? 【第五届中国云计算大会】由瓦特变比特输出,新疆要做中亚云服务中心 应用程序扩展性实现的十宗罪 图文:看谷歌实习生的惬意生活 为移动而设计:交互设计篇 小米游戏中心月度报告:极品、神庙、找你妹 中科院:常温下的液态金属电路3D打印机 细数IE10里的HTML5特性 http://www.000163.com/的空间能不能信得过? 请帮忙哟,在线急等 asp.net下如何用c#编写程序实现调用数据库中的多个表显示在datagrid 如何调用存储过程来删除表中的列名???? 给一个变量赋空值的问题 如何在DirectDraw显示Edit,输入文字?? 贴子回复次数大于跟给分次数是什么意思啊?让不让结啊?? 结交delphi爱好者! 请各位高手给我指点一下方向? 如何在Sybase数据库中获得刚插入的那条记录的主键? 怎样获得菜单项(menuitem)名? 简单问题 请问如果有一个dll文件,我想知道里面有什么函数,但我又没有说明书,有什么工具么? 报表设计器怎末没有在外接程序菜单中显示出来呀?? 如何知道选哪个? 急,如何将图标保存在一个数组中,并将它显示出来? struts配制数据源中如何指定url编码? 在csdn设立开放源代码的项目 妈的!等咱有了钱... zt 请问那位大哥有在linux用mysql管理前端啊 client script动态改变表单的问题 我从网上下载了一个例程,可是太大了,不知道从哪里开始读 如何能在程序的线程被kill的时候将定义的变量写入文件保存 有做过图书馆管理系统的请进(VB+SQL Server)C/S结构 请问这样一行代码是什么意思? 简单问题给100分 在csdn如何改变字体,还有,如果不必自动登陆? 关于创建共享库(.so)的问题,高手帮忙 关于如何限定一个文本框的数据类型 超出一个月未结贴的名单公布 用DATAGRID的绑定列能传一个ID给下一下FROM吗? 模板应用时出现的图片不能显示出来的问题? 这么简单的问题 就20分吧 郁闷...辞过职的人帮帮我 电脑极不稳定 那里可以下载到VC++6.0的MSDN啊??着急看呢! 请问visio的数据库模型的关系怎么删除?? Linux无法启动, 请高手解决!!! 请问wmv格式的文件怎么打开?!(视频) 地址栏中不能输入别的网址,请问是什么原因? 如何知道win2003已被激活? 这个格式怎么实现? 急,一个很简单的photoshop问题! 我想在vb程序中加入一个广告条,请诸位推荐一个信誉好的广告条公司好吗?(来者有分) MIS程序可以制作成安装程序吗? win2003 VLK中VLK是什么意思? 运行jsp需要在2000下装什么软件? datagrid 的使用步骤是什么? 如何做流媒体? 一般来说debug版不出错,release会出错问题出在哪里? 如何做流媒体 一年之计在于春什么意思 包公的廉洁故事 形容墓地哭声漫天,用一个成语 请问,怎样理解勾3股4玄5?小学数学.谢谢! 角a的终边经过点P(-1,2)则cosa的值是? 哪些动物是体内受精哪些是体外 买一张桌子和一把椅子共用56.5元,一张桌子比一张椅子贵12.5元,桌子和椅子各多少钱? 若cosa=4/5,a∈(0,π),则cota的值是 你认为当代国际关系要走向一个和谐世界,应该坚持的共同价值或核心价值是什么? 塔机金属结构有何特点? 轨道式塔式起重机较长轨道每隔()米加一组接地装置? 求当代国际关系理论的主要理论及其代表人物如题 塔式起重机金属结构上囊纹的“囊纹”是什么意思 拿破仑是怎样登上历史舞台的?如何认识其对外战争的性质? 密码学和信息安全小组研究的主要任务是什么 战略协作伙伴关系是什么?国家之间的关系主要有哪几种?1.战略协作伙伴关系是什么?(和战略合作伙伴关系有什么区别?)2.国家之间的关系主要有哪几种?(最好用我国现在与其他具体国家的 请问后的舞请与我一起片中英文歌曲的名字是什么 民族主义对当代国际关系的影响 两张课桌之间有一张椅子英文怎么说 sucked into 数理逻辑与密码学、信息安全有什么关系? 后门的旁边有一张椅子吗 用英语怎么说? 为什么通货膨胀有利于进口,不利于出口? 密码学在信息安全当中的应用有哪些 I was in a hurry to finish my work 同义句I ___ my work __ I am sucked at shopping. 买回来的天文望远镜可以自己配三脚架吗?我想买个带重赤道仪的支架,但是如果跟望远镜一起买的太贵了,可以买回来组装么? 书屋里有一张桌子和一张椅子用英语怎么说 在通货膨胀不能完全预期的情况下,通货膨胀将有利于:( )A.债务人B.债权人C.雇主D.政府多选题 天文望远镜可以不用三角架吗100多元的天文望远镜好吗? 中国如何推进建立国际新秩序 老外说 的 sucked 有哪些意思?比如说 my kidney sucks? 蜥蜴是体内受精,体外发育吗?鱼是体内受精,体外发育吗? 韩国人对朝鲜族的态度是不以为然还是什么 中国政府关于建立国际新秩序的主张是什么? 急用解释下面一些在新闻媒体及口语中频频出现的词语:1.酷 2.粉丝 3.曝光 4.焦点 5.作秀 6.透视 7.宰 8.红牌 9.利剑高悬 10.请君入瓮 学而时习之不亦说乎 的意思三人行必有我师 意思 学而不思则( ),思而不学则殆的意思 中国政府为什么要把建立国际新秩序作为我国外交政策的重要组成部分 帮我解释一下这些新闻媒体及口语频频出现的词1、醋,2、粉丝,3、曝光,4、焦点,5、作秀,6、透视,7、宰,8、红牌,9、利剑高悬,10、请君入瓮 英语的姓氏和名字搞不清啊!在姓氏后标上L,在名字后标上F., 数码相机与天文望远镜连接出现镜头与相机之间的通讯失败,怎么回事?我用佳能350D相机机身通过转换环和天狼长戈1号天文望远镜连接进行天文拍照,出现镜头与相机之间的通讯失败Err01 如果一个三口之家年用电量为600千瓦时,三峡电站可供多少个家庭用电?葛洲坝电站呢? 跪求好听的英文姓氏!注意是姓氏!不是名!我的英文名是wendy相配一个姓氏,最好是以M开头的. 为什么哲学都是二元的?什么是二元哲学? 天文望远镜接相机 学而时习之“时”用法 增加税收、向银行借款和透支、发行政府债券 来弥补财政赤字的各自优缺点 直流发电机124kw,E 240v.ro 1欧,用s为6mm2铜导线向距离100m的r2供电,电压220 功率11kw求发电机发出功率,发电机内阻和线路上消耗的功率 ,负载消耗的功率求公式 基因重组在符合条件的细胞中一定会发生吗 大量发行货币怎样在一定程度上削减财政赤字? 解释下面一些在新闻媒体及口语中频频出现的词语 1酷2粉丝3曝光4 焦点5作秀6透视7宰8红牌9利剑高悬10请君如 历史上包拯到底怎么死的? 中国是否可以实行赤字财政政策希望有自己的观点 相机连接天文望远镜我是凤凰DC828MW的单反胶片的相机 望远镜是比较普通的那种有一个架子的 要把两者连接起来用什么接口啊 历史上的包拯真正的包拯长得是什么样子的啊?脸真的是黑色的?头上真的有弯月?如果真的有弯月 那弯月是怎么弄的啊?我在此谢谢了 . 实行赤字财政是指什么 四字成语:形容哭声惨烈( ) The coat___he was hed yesterday is still wet.且我们在学定语从句 镜头可伸缩的照相机(如松下FX07)能接在天文望远镜上进行摄影吗是博冠开拓者 60/700 形容快死了说话断断续续的成语 悉尼歌剧院走过40年美丽旅程欧债危机对欧盟的重新排序全球最大海上书店抵达巴林中俄舞台艺术对话举办美最大银行被罚130亿美元“北京中轴线”展在开罗举办奥巴马称对特工可能监听默克尔电话之事壮汉翻拍性感照做广告 翘臀又嘟嘴(高窃听默克尔,奥巴马早就知情?监听亚太,美曾想“借道”日本光缆美动物园老虎“抢南瓜”迎万圣节(高清周边外交需要邻国间更深入地相互理解意大利女画家作品武汉展出 观众:口味中国顶尖富豪财富激增 168人 净资监听亚太,美曾想“借道”日本光缆美媒:监听活动曝光迫使美停止炒作“中因假牙飞出车外请假 美雇主为员工缺勤美最大银行被罚130亿美元印火星探测器欲争亚洲第一欧债危机对欧盟的重新排序全球最大海上书店抵达巴林平不平整?变没变形? 市区主干道全面专家会诊“保鲜膜男孩”入院治疗狂欢之后一地垃圾 草莓音乐节在风中凌用科技改变生活的“梦想家”“勇做走在时代前面的奋进者、开拓者、为维护民族团结、社会稳定、祖国统一作药农采花忙“社科奖第六届全国高校市场营销大赛”公务员改革饭碗缘何“瓷”变“铁”?李克强对埃塞俄比亚和非盟总部进行正式作为新疆工作的着眼点和着力点守望生命以青春奋斗开拓人生奉献社会扬州大学: 以志愿文化凝聚大学“精神让青春在实现中国梦的奋斗中更加多彩为江盼“点赞” 为青春喝彩与祖国和人民同行努力创造精彩人生用坚守实现梦想青年要自觉践行社会主义核心价值观让青春之花绽放在祖国最需要的地方“奋斗的青春最美丽”
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘