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

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

TextView多行本文滚动轻松实现 获取和设置ListView的选择项 EditText中显示隐藏Android输入法窗口 自定义ListView行间的分割线 Android程序完全退出的三种方法 WebView使用技巧和介绍 EditText仅允许特定类型数据输入 自定义Android应用的访问权限 android.text.format文件大小和日期解析类 Android Rootkit相关揭秘 androidmanifest.xml高级属性解析 根据packageName构造Context SQLite操作,还是raw方法更简洁高效 Android开发基础YesNo对话框构造代码 Android代码性能优化技巧 Android开发注意点 Part One onSaveInstanceState和onRestoreInstanceState的用处 Android基础概念Context的作用 在Android的Notification中显示进度条 Android跨进程数据通讯-剪切板Clipboard ConditionVariable Android线程同步 Android软件开发方向指导 ArrayList LinkedList Set HashMap介绍 PermissionInfo Android权限枚举方法 Android上HTTP协议通讯状态获取 Android开发需要自己完善的类库总结 Android的ListView控件滚动时背景问题 GestureDetector手势识别类 - 进阶篇 MenuInflater Android菜单从xml创建方法 EditText输入提示你知道吗? Android布局Java代码构造法 为什么DadaGrid没有数据集绑定的时候或者数据集中没有记录时?Web Forms 什么软件可以修改.hlp文件? 如何判断进程中哪个应用是我用程序启动的???? Win2000 Server事件日志问题多多,请各位高手不吝赐教。 小问题,望指教!感谢! 我用DAO做了个数据库应用,安装到一台很"干净"的机器(就是没有装过access),现在运行时告诉我无法对DAO/Jet db 引擎进行初始化,请问我还 高手们,我现在注册LOCAL servr服务器出现这个问题请帮忙 拦截由于sql写错后,由数据库发出的错误!!!!!! 有关路径问题的请教 高手们,我现在注册LOCAL servr服务器出现这个问题请帮忙 望高手指点:关于安装导入的.dll的问题,包括msxml.dll, sqldmo.rll,怎么处理? 一下子忘记了,手工注册控件那个语句是什么? 请问哪里有学习xml的好网站?多谢了。马上给分。 请问初学数据库应该看什么书?入门以后又应该看什么书呢? XSL显示问题 怎样将从oracle中取出的数据,用jsp生成一个access Byte数组,获得的是Bitmap的数据,如何存成.bmp文件? 什么是水晶报表?干什么的呢?顺便问问外国网站那些动态文章怎么生成的? 难!!!用AdRotator控件,如何让多个实例,在只使用一个Ads.xml广告文件的情况下,不显示相同的广告? 什么软件可以修改.hlp文件 VS.net中, 一个关键的问题?各位高手请献计献策! 请问那里有ms exchange server2000正式企业版下载的?很急用,到处都找不到,请大家帮帮忙,谢谢! 如何得到正在编辑状态的一个列的值 谁有关于软件工程的英文文档? 如何判断哪个进程是我用程序打开的? 我的asp.net程序运行一段时间后,就会出现不能访问sql server的情况,好象说是缓冲区已满,不知如何解决? 如何利用串口来实现SNMP协议呢? 问中国球迷: 求一段从web页面通过提交插入sqlserver的源代码, 什么软件可以修改.hlp文件呢 谁有软件工程的英文文档? 请问如何给asp写成的系统打包成安装程序,我用了sql-server,难道连sql的设置之类的东东也一起打包吗? 请教PB高手,谁可以告诉我下段程序的功能 数据窗口中某字段为date类型,我希望新增记录是能自动将当天的日期附值给它 谁有 平衡二叉树的插入算法 的C源代码? 谢了 什么软件可以修改.hlp文件 id是怎么随机生成的?这是小弟我学asp.net遇到的疑惑 一个FLASH,,看看像不像自己。。。 谁有 平衡二叉树的插入算法 的C源代码? 谢了 请问那里有ms exchange server2000正式企业版下载的?很急用,到处都找不到,请大家帮帮忙,谢谢! Win2000辅助域控制器问题。无法建立辅助域控制器。谢谢! 什么函数能对CStringArray中的字符串按字母顺序排序? 请问数据窗口更新的问题。 请教有没有判断日期格式是否正确的函数? 各位高手,有人听说过PCI-7841,帮帮忙吧,拜托了 js可以修改xml里的数据吗? 如何知道某一台电脑的IP的子网掩码??急!!! 考试通过心情爽,开心、快乐的人请来!!! 什么地方有关于这个APACHE的安装,配置的讲解呀? 请教PB高手,谁可以告诉我下段程序的功能 神啊~~救救我吧~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NaCl溶液加入AgNO3溶液后,和加入稀硝酸后的现象和离子方程式 在发电厂出来的高压电经过多少步骤才到用户的! 购买选金汞板哪里的好? 高一物理一道关于自由落体的计算屋檐上每隔相同的时间间隔滴下一滴水,当第5滴正欲落下时,第一滴已刚好到达地面,而第3滴与第二滴分别位于高为1m的窗户上、下沿,如图所示,问:1.此屋檐离 我国封建社会的朝代、建立者、起止时间、都城,重要帝王(最少两个)是封建社会(全部朝代),必须要全面!重谢! 求蓄电池不含汞的申明以及产品说明如何写 自由落体运动计算题小球从高处左自由落体运动,落地前的最后1s内的位移是总位移的9/25,取g=10m/平方秒,则小球开始下落时距地面的高度是多少m?过程最好清楚点,我怕看不懂 三皇五帝是不是指封建社会的皇帝 中华民国是谁成立的 小球从高出做自由落体运动,落地前的最后1s内的位移是总位移的二十五分之九,取g=10m/s^2,则小球开始下落时距地面的高度是多少? 为什么有皇帝的社会,被成为封建社会啊? 哪里可以做化学毒物的检查患者信息:男 23岁 浙江 衢州 病情描述(发病时间、主要症状等):我最近头很晕 怀疑和厂里接触的毒物有关 想做这方面的检查 不知道哪里可以做 好像一般医院不 自由落体运动 计算题2010年10月1日我国成功发射了“嫦娥二号”绕月卫星,我国计划2020年实现载人登月,若你通过努力学习、刻苦训练有幸成为中国登月第一人,而你为了测定月球表面附近的重 战国秦朝时期的一些问题.1.匈奴为什么不在战国时期去参加中原征战?2.秦国为什么只想东进,西进北上呢?3.春秋战国时期有没有诸侯国要灭匈奴?4.秦灭六国后,秦能设立桂林象郡,为什么不去灭 急性化学物中毒及现场救护原则 高一物理自由落体计算题把一条铁链自由下垂地悬挂在墙上,放开后让铁链做自由落体运动,已知铁链通过悬点下3.2m处的一点历时0.5s,求铁链的长度貌似我们的答案上是2.可 我不会做··· 椭圆轨道上角动量怎么算L=mrvsinα r是指轨道上点与中心天体的距离么? 行星运动的轨迹是怎么计算出来的 为什么说细胞骨架是细胞结构和功能的组织者?细胞内一些细胞器和生物大分子的不对称分布有何意义?细胞骨架 椭圆轨道中近地点和远地点的角动量他们两个的角动量是相等的?(刚有个选择题的答案是这样的) 在椭圆轨道中只有在这两点是相等的? 本计算行星轨道的读物 PAL-39S双氧水浓度计怎样使用 求表示年龄段的词语从出生 到很老很老 比如 豆蔻年华 花季 雨季 花甲 古稀 什么的.最好比这几个更文学一点.谢. 不同年龄段的人应该分别用什么词语来进行描述?想将不同年龄的人用不同的四字词语描述出来,想要描述的几个年龄段分别是:1-7岁(入学前)-----------------8-13岁(小学)14-20岁(中学、高中 求双氧水价格我是潍坊这边双氧水27.5的1000一吨 能交流下价格么?27.5 30 35的 古代称年龄的词语…?如 古稀--70 环境毒物的分类的详细介绍 下列哪项是生物体都具有的生命活动()答案是新陈代谢,问题是为什么不是细胞分裂? 稀有空气和氦 氖 氩 氪 氙 会产生什么样的颜色 表示年龄的词,如:贵庚.最好是古代的 细胞分裂为什么不属于新陈代谢 锅炉计算问题,已知烟尘浓度(mg/m3)70.2 二氧化硫浓度(mg/m3)201.5 氮氧化物浓度(mg/m3)90.9 额定蒸锅炉计算问题,已知烟尘浓度(mg/m3)70.2 二氧化硫浓度(mg/m3)201.5 氮氧化物浓度(mg/m3)90.9 额定蒸汽量4t/h 十三四岁称为( )二十岁称为( )三十岁称为( )四十岁称为( ).一直到100岁.这些年龄用什么词语表示?) 加快人体新陈代谢会否加快细胞分裂?人体器官细胞分裂的次数是否有区间值? 卤素单质与金属钾、钠化合均生成离子化合物吗?氟化银是沉淀吗,溶于稀硝酸吗? 求化学中类似铊的毒物还有什么 细胞分裂,人的寿命,新陈代谢的关系?新陈代谢越快,细胞分裂速度就会加快.人的寿命是和人体细胞的分裂次数和分裂周期相关.人体的细胞分裂次数本来是固定的,那么新陈代谢快了,那我们人 为什么金属钾钠用完可以放回原瓶…为什么其余金属单质不行 .请问列举的毒物中无色无味的有哪些杀虫剂、杀菌剂、杀螨剂、除草剂农药 二甲苯、二硫化碳、汽油、甲醇、丙酮等,苯的氨基和硝基化合物,如苯胺、硝基苯请问列举的毒物中无味的有哪些 下列物质分别在氧气中燃烧时,集气瓶内需预先加入少量细沙或水的是 A.木炭 B.硫C.铁丝 D.红磷我觉得应该是B、C可是答案选C 制取金属单质就是那个根据金属活动性表是k到什么是用什么方法制从.到.哪些用电解法 哪些是热还原法 哪些用置换法的. 瑞风商务车的ABS故障灯常亮是怎么回事 化学性质不活泼的气体是惰性气体吗?比如氮气、稀有气体(氦、氖、氩、氪、氙等)化学书上说过去把稀有气体称为惰性气体,那它们现在还是吗? 编历史小故事根据春秋战国纷争那课,100字左右故事中要含有5个成语故事〔要符合历史事件〕急用根据初一上学期历史书编写历史故事 100字左右 根据秋战国纷争那课 老马识途 围魏救赵 卧薪 碳酸氢钠与金属锌反应生成什么是硫酸锌,硫酸钠和氢气.还是硫酸锌,亚硫酸钠和水.它有强氧化性么? 大变革的时代封建社会是怎样确立的 关于硫酸钡和氯化银既不溶于水也不溶于稀硝酸这句话应该如何理解这里的不溶是说不反应?那么为什么不说不溶于稀盐酸、硫酸之类呢? 我记得我以前焚烧过一些一次性泡沫盒,现在学到里面会产生二恶英,而且剧毒致癌物,我会患上吗? 怎么理解细胞骨架的网络结构? 有几种发电方式 单质的钠怎么变成碳酸氢钠 怎样理解优秀的含义?希望回答有文采,具有幽默感,适合在面试时使用. 作文: 《告诉你,我很快乐》 我是初一的 男 铁单质和碳酸氢钠反应的化学方程式 配来配...铁单质和碳酸氢钠反应的化学方程式配来配去都不行! 我是男生我骄傲作文我是男生我骄傲 450到500字之间 现在发电都有几种途径呀? 汞、可以买吗 氦的化学性质完全不活泼,不参与任何反应吗?氖和氩哪个更活泼? 五年级作文我忙但我快乐 我是男的, 我们在做实验验证空气组成时,为什么不选择汞
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘