cximage图像操作
来源:互联网 发布:茅台葡萄酒怎么样 知乎 编辑:程序博客网 时间:2024/05/22 04:25
CxImage是一个可以用于MFC 的C++图像处理类库类,它可以打开,保存,显示,转换各种常见格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。可以实现BMP<->JPG,PNG <>TIFF格式等等的互相转换。
CxImage不仅可以实现图像文件的类型转换,还可以实现在内存图像数据的类型转换,并且使用很方便。除了文件格式的相互转换,它还提供了很多很多图像后处理的功能,比如图像模糊,锐化等等,功能非常强大和实用。
示例: 如何转换一种格式到另外一种格式
CxImage image;// bmp -> jpg image.Load( " image.bmp " , CXIMAGE_FORMAT_BMP);if (image.IsValid()){ if ( ! image.IsGrayScale()) image.IncreaseBpp( 24 ); image.SetJpegQuality( 80 ); image.Save( " image.jpg " ,CXIMAGE_FORMAT_JPG);}// png -> tif image.Load( " image.png " , CXIMAGE_FORMAT_PNG);if (image.IsValid()){ image.Save( " image.tif " ,CXIMAGE_FORMAT_TIF);}
如何从资源中加载图像
// Load the resource IDR_PNG1 from the PNG resource type CxImage * newImage = new CxImage();newImage -> LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG1), " PNG " ),CXIMAGE_FORMAT_PNG);或者// Load the resource IDR_JPG1 from DLL CxImage * newImage = new CxImage();HINSTANCE hdll = LoadLibrary( " imagelib.dll " );if (hdll){ HRSRC hres = FindResource(hdll,MAKEINTRESOURCE(IDR_JPG1), " JPG " ); newImage -> LoadResource(hres,CXIMAGE_FORMAT_JPG,hdll); FreeLibrary(hdll);}或者// Load a bitmap resource; HBITMAP bitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1)));CxImage * newImage = new CxImage();newImage -> CreateFromHBITMAP(bitmap);
如何解码内存 中的图像
CxImage image((BYTE * )buffer,size,image_type);或者CxMemFile memfile((BYTE * )buffer,size);CxImage image( & memfile,image_type);或者CxMemFile memfile((BYTE * )buffer,size);CxImage * image = new CxImage();image -> Decode( & memfile,type);
如何对内存中的图像编码
long size = 0 ;BYTE * buffer = 0 ;image.Encode(buffer,size,image_type);...image.FreeMemory(buffer);或者CxMemFile memfile;memfile.Open();image.Encode( & memfile,image_type);BYTE * buffer = memfile.GetBuffer();long size = memfile.Size();...image.FreeMemory(buffer);
如何创建一副多页的TIFF
CxImage * pimage[ 3 ];pimage[ 0 ] =& image1;pimage[ 1 ] =& image2;pimage[ 2 ] =& image3;FILE * hFile;hFile = fopen( " multipage.tif " , " w+b " );CxImageTIF multiimage;multiimage.Encode(hFile,pimage, 3 );fclose(hFile);或者FILE * hFile;hFile = fopen( " c://multi.tif " , " w+b " );CxImageTIF image;image.Load( " c://1.tif " ,CXIMAGE_FORMAT_TIF);image.Encode(hFile, true );image.Load( " c://2.bmp " ,CXIMAGE_FORMAT_BMP);image.Encode(hFile, true );image.Load( " c://3.png " ,CXIMAGE_FORMAT_PNG);image.Encode(hFile);fclose(hFile);
如何复制和粘贴图像
// 复制(copy) HANDLE hDIB = image -> CopyToHandle();if (::OpenClipboard(AfxGetApp() -> m_pMainWnd -> GetSafeHwnd())) { if (::EmptyClipboard()) { if (::SetClipboardData(CF_DIB,hDIB) == NULL ) { AfxMessageBox( " Unable to set Clipboard data " );} } }CloseClipboard();// 粘贴(paste) HANDLE hBitmap = NULL;CxImage * newima = new CxImage();if (OpenClipboard()) hBitmap = GetClipboardData(CF_DIB);if (hBitmap) newima -> CreateFromHANDLE(hBitmap);CloseClipboard();
如何在图片框控件(Picture Box)中显示图像
HBITMAP m_bitmap = NULL;CxImage image( " myfile.png " , CXIMAGE_FORMAT_PNG);...CDC * hdc = m_picture.GetDC();HBITMAP m_bitmap = image.MakeBitmap(hdc -> m_hDC);HBITMAP hOldBmp = m_picture.SetBitmap(m_bitmap);if (hOldBmp) DeleteObject(hOldBmp);if (hdc -> m_hDC) m_picture.ReleaseDC(hdc);...if (m_bitmap) DeleteObject(m_bitmap);
Cimage合并图片就是这么简单:
CxImage t_img1,t_img2,t_img3; int t_h1,t_w1,t_h2,t_w2,t_h3,t_w3,t_bpp; t_img1.Load("F://1.jpg"); t_img2.Load("F://2.jpg"); t_h1=t_img1.GetHeight(); t_w1=t_img1.GetWidth(); t_h2=t_img2.GetHeight(); t_w2=t_img2.GetWidth(); t_h3=t_h1; t_w3=t_w1+t_w2; t_bpp=t_img1.GetBpp(); t_img3.Create(t_w3,t_h3,t_bpp); t_img3.MixFrom(t_img1,0,0); t_img3.MixFrom(t_img2,t_w1,0); t_img3.Save("f://3.jpg",CXIMAGE_FORMAT_JPG);
译后序:
关于图像处理库,我相信大家有一个共同的疑问:这么多图像处理库,我该如何选择?在CSDN的blog中有这样一段文字,比较透彻地回答了这个问题,感谢作者的透彻解释:
"CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage, PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。
在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。
- cximage图像操作
- 开源CxImage图像操作类库
- CxImage 显示图像
- Cximage 读取图像
- 整理:CxImage操作
- CxImage图像处理类库
- CxImage图像库的使用
- CxImage图像处理类库
- CxImage图像灰度处理简述
- CxImage图像库的使用
- CxImage内存方式转换图像
- CxImage图像库的使用
- CxImage图像灰度处理简述
- CxImage图像库的使用
- 在VC++中使用CxImage库读写图像实现像素操作
- 图像库OpenCV/FreeImage/CImg/CxImage
- 四大图像库:OpenCV/FreeImage/CImg/CxImage
- CXimage图像处理类的应用小结
- C++内存管理
- Ubuntu上通过cgi建立Mercurial服务器
- Telepresence
- JAVA 从0开始 一
- [12月7日的脚本]在多列表项上开启一个设计者工作流
- cximage图像操作
- hdu 4006 (优先队列)
- Warning: webapps\yb\WEB-INF\fbxml\KaiPian.tmx modified in the future.
- C#Arcgis engine 获取axGlobeControl1的地理经纬度
- C/C++热门精品资料地址集(110个)(转)
- NHibernate Inheritance Mapping 继承映射
- JS中关于把函数作为另一函数的参数的几点小总结
- Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率
- linux图形比较工具meld