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

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

Twitter开源其Java消息流库Hosebird Client API正在崛起 渐成企业核心业务 HTML5会是Firefox OS的生门还是死门? 三星的成功并非偶然,而是专业 避免恶意软件 日本政府警告用户慎用Google Play 曝光:诺基亚要推出新手机系统Meltemi 为研发iWatch,Jony Ive订购大量Nike腕表 APP运营人的一天:宫爆老奶奶产品运营 新传感器:三星Galaxy S4或将支持眼球追踪 IBM发布基于OpenStack的服务 从Windows Server 2012云创益大赛看国内行业私有云发展 张小龙谈微信:你可能不知道的9件事 源代码管理十诫 游戏手柄也能编程 极客打造不用键盘输入的IDE 开源不只是程序员的专利 政府也可以 开源搜索Elasticsearch:PB级数据的快速搜索 月下载量已达20万次 乐视网联手富士康推超级电视 欲颠覆传统盈利/营销模式 IBM 2012IT实践达人赛圆满落幕 宣布成立新兴技术大学 对比MapReduce 流处理框架没有所谓的查询层 美国政府:修复漏洞仍有风险 应禁用Java插件 AppGlu应用辅助工具:帮助开发者处理善后工作 iOS!你这几个方面该向Android好好学习 小于1%,中国有真正自主的移动操作系统吗? 张小龙专访系列(下):不一样的产品思维 Gartner:截止到2016年公有云市场复合增长为17.7% Appcore:在企业内部部署IaaS平台 B轮融资600万美元 超现实主义!用脑电波控制你的计算机设备 搜狐否认“情理之中”的退市 上市仍是最优选择 六大BaaS产品推荐:移动开发必备的后端云服务 未遵守承诺 微软遭遇欧盟7.31亿美元巨额罚单 PaaS正能量:6人团队,仅1人全职后端 支撑6000万用户 怎样给ScrollView添加鼠标滚轮支持? 为什么protect还能用? 需要高手帮忙,Active Dll的问题 图片数据 怎样才能写出即能在VB里又能在ASP里用的COM? 用vc做游戏一般会不会用到MFC 请高手帮忙看看啊,设定SERVICE启动时用户和密码的问题,急啊,47分(我只有这么多可送)!!! 程序员考试 分数是多少? 如何使用属性页propertypage 用JAVA作应用程序服务器,使用SOCKET,如何定义通讯协议? 求助:TClientDataSet的使用(急)!!! 看一看,瞧一瞧啦!!评选近几年中国十大杰出人物!自由提名!!我提两个 先…… IE问题 急!! 请教如何大开Vb3.0以前文件 我要在“1.3.5.2.4.6.3”中看第7位是不是2,该怎么做? 有关HTML中
的问题
嘎毛毛奇怪了. 请教大家一个问题,请看下面。。。 告诉大家一个链接,来着有分,呵呵 请教三层开发 请问用stringGrid控件,怎样获知当前行是第几条纪录? JScrollbar的颜色怎么改??? 请Norwaywoods(挪威的森林)来拿分!!!(方法见内容) php连mssql,php.ini or httpd.conf需要改动什么地方? 关于多文档编程的超难问题,高手请进!!一定给分,我会继续加分!!! 提问:关于软件测试的若干问题,谢绝灌水者入内!高薪聘请业内人士! 请问用javascript怎么显示客户端的IP地址?谢谢 sql问题 oracle中什么权限,才能使一个用户下的表参考另一个用户下的表(就是外键)? 种了中国一号病毒,怎样才能铲草除根? yinx(yinx)请进,拿你应得的分数 请各位高手帮忙,有高分送上。 一个SQL语句的问题。谢啦 为什么我的msdn帮助系统“目录”、“索引”等里的标题都显示不出来了呢? 存储过程只能用一种方式调用吗? 数据库字段问题 如何在ADO的SQL控件中不用ODBC完成长型备注型字段的模糊查询 数据库连接问请各位指点(300分) 圖像控件和報表製作 创天中文版是怎么汉化的?我想把它改回英文的要怎么改? 请问有没有Linux版本的QQ? 找DriverStudio2.5正式版 VB6中不能使用ACCESS2000数据库??? vb中怎么调用dos命令 请问海星... 哪有visual age3.0下载? 有关FTP 我双击注册表编辑器出现"注册表编辑器被管理员禁用"是怎么回事?怎么解决? 如何更改Oracle显示日期的默认方式? *****高手请进****** ======================各位高手,看一下!UP也有分! 化简与求值:当5m-3n=-4时,2(m-n)+4(m-n)+2的值, -1,4,-7,10…(-1)^n(3n-2)的前n项和等于 设Sn=1*4+2*7+.n(3n+1)则Sn= 汽车空气干燥器怎么安装我的解放货车原车不带干燥器.冬天的时候气路经常冻住.我想自己加装一个,应该注意一些什么问题,怎么安装有的干燥器有两根电线,有的没有,怎么回事,电线是干什么 若5m-3n<0,化简|5m-3n-1|-|2-5m+3n|. 开发橡胶配方用什么显微镜有谁搞这方面的,是观察橡胶中小料的分散程度,大家开发配方都用什么显微镜啊,体式的还是金相的, 汽车空气干燥器的选择依据 关于塑料阻燃等级的测试方法有哪些执行标准?例如94-V的 从事橡胶配方有什么证书吗比如说资格证 如何解决汽车干燥器的故障 阻燃材料 烟密度 如何测试 设计试验方案证明食品充气包装所充气体是什么?小明和小红对市场上销售的一种分袋包装的蛋糕发生了兴趣,因为蛋糕包装在充满气体的小塑料袋内,袋内的气体充得鼓鼓的,看上去好像一个小 WBACC汽车空气干燥器怎么样电话:400000 1687 采用卡尔-费休法测定食品中水分,当样品颗粒较大时,水分测定的结果会怎样 二氧化碳为什么不能对食品充气包装? 汽车空气干燥器在水中密封完,3个月以后再使用发现有漏气的,请问如何解决问题?能够使长期抱住汽车空气干燥器不漏气! 阻燃橡胶谁能来给介绍下? 求lim(n→∞)[(1^3+4^3+7^3+……+(3n-2)^3]/{[1+4+7+……+(3n-2)]^2} 植物衰老的类型 什么是整体衰老、什么是地上部分衰老、什么是渐进衰老、什么是落叶衰老?学科上有明确定义 什么是防火胶 证明食品袋内的气体不是二氧化碳的实验 集合A是由形如m+根号3n(m属于Z,n属于Z)的数构成的,判断(2- 根号3)分之1 是不是集合A中的元素m=2 n=1 怎么得出 什么是阻燃胶?在涤棉阻燃整理中,阻燃剂与阻燃胶的不同.(我是新号只有20财富,) 如何从一包充气包装的食品袋中取出气体进行检验 请问?300克98%的硫酸加入140克水,硫酸的浓度是多少呢. 橡胶颗粒怎么做阻燃检测 如何验证食品袋内的气体是CO2、N2、稀有气体?要步骤及实验现象. p.s.如果是用燃着的木条的话,其他的不是也会熄灭吗?如二氧化碳等 不会使澄清石灰水变浑浊的也有很多气体吧.怎么判断就是 硫酸的酸份与硫酸的浓度有什么区别 4/(1*2*3)+7/(2*3*4)+.+(3n+1)/[n(n+1)(n+2)]急吖还有几个1+1/(1+2)+1/(1+2+3)+.+1/(1+2+3+...+n)=1/(根号下1+根号下2)+1/(根号下2+根号下3)+1/(根号下3+根号下4)+...+1/(根号下n+根号下n+1)=1/3+1/(3+5)+1/(3+5+7)+.+1/(3+5+7+...+2n+1) 平板硫化机都有什么型号的?都是怎么分的? 硫酸储罐设置干燥器的作用是什么? 请简述如何用干燥称重法测食品中的水分.请简述如何用干燥称重法测样品中的水分. 平板硫化机怎么工作的 硫酸干燥器怎么进行干燥? 用直接干燥法测定食品中的水分,有时加海沙为的是什么? m-n=2 2m+3n=十四 二元一次方程组 要详解 化简{5m-3n}-{8n-2m} 直接干燥法测定水分的原理是什么?若用此方法测定半固体或液体样品水分,样品应如何处理? 平板硫化机有什么应用? 橡胶耐老化成分分析 第一次听到这个词, 食品水分检测,常压干燥法和甲苯蒸馏法的比较我们公司生产食用香精,涉及的原料及成品时常需要检测水分,一般均食用GB 5009.3的方法检测水分,有时候是常压干燥法,有时候是采用蒸馏法.在检 解方程二元一次方程5分之m-2分之n=2 2m+3n=4 什么胶比较耐老化 生物制品中水分的测定 直接干燥法实验原理及步骤 m+n/2-2m-n/8=2 2m+m-3n/7=-6 二元一次方程 测定硫酸铜结晶水含量的问题```化学!实验中为什么要使用较纯的硫酸铜晶体?为什么要做恒重操作?为什么加热后冷却要放在干燥器中? 食品中,自由水和结合水的区别是什么? m-(n+20)÷2=2,2m+3n=12 二元一次方程求了 高中实验硫酸铜结晶水含量的测定具体步骤及注意事项我高复的,旧版的教材去年考完就扔了,新版的好多书买不到,这个实验这边算冷点吧,不过以防万一啦,我浙江的 还有三楼的,要高 水分测定仪测的水分包括自由水和结合水吗? 二元一次方程 用代入法解下列方程组 m-n/2=2 2m+3n=12 测定硫酸铜的结晶水含量,下列方案中不可行的是A称量 加热 冷却 称量CUOB…… 硝酸铜C 用已知质量的浓硫酸吸水并称量D +NAOH 过滤 加热 冷却 称量CUO要理由 1+4+7+10+.+(3n-2) 的前n项和 橡胶能不能用硫化机做出各种颜色,可以的话,市面上加工, 在测定硫酸铜中结晶水的含量的实验的问题1、加热硫酸铜晶体是试管口一定要朝下倾斜是为什么?2、在什么情况下停止加热3、硫酸铜中水的质量分数4、实验结果与实际产生误差的原因 请高 1+1, 1/a +4 , 1/a^2 +7, 1/a^3+10.,1/a^(n-1) + (3n-2) 的前n项和 硫化机是属于橡胶产品制造机械吗?最好详细点儿 化简-3n+5m-[m-5(m-n)+m]的结果是多少 那里有卖pvc排水胶跟给水胶配方与制做 因式分解 1、(3n+2)的平方-25n的平方 2、(x的平方-4x)的平方+8(x的平方-4x)+16
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn