Cximag是一个库 能够处理大多数格式的图像的打开, 变形,等功能, 很强大, 而且还是开源的. 不过作者好像在2004年就停止了更新, 可能是因为大部分的功能都已经实现了.
我用的vs 2005 与vc有不小的区别. 因此 设置和作者的介绍有点不同, 我是笨鸟, 把所有的.h和.cpp 文件都拷贝到工程的一个文件下. 然后在2005中设置lib 的路径. 这样就不需要 设置
#pragma comment(lib,"cximage.lib") #pragma comment(lib,"Jpeg.lib") #pragma comment(lib,"png.lib ") #pragma comment(lib,"zlib.lib ") #pragma comment(lib,"tiff.lib ") #pragma comment(lib,"jasper.lib ") #pragma comment(lib,"j2k.lib ") #pragma comment(lib,"jbig.lib ")
只需在 stdafx.h 中加入 #include "ximage.h"就行了
Cximage 是一个不同于Cobject的类 因此可以自己设个类 用于图像的处理,也可以在 Cojectt的派生类中随便添加 .
1 bmp转换为jpg 可以新建一个按键然后对按键做如下响应 ,也可以在ondraw 函数中添加 函数.
在其他的函数中没试验.
CxImage image; // 定义一个CxImage对象
// 从bmp文件转换为jpg文件(bmp -> jpg) image.Load("image.bmp", CXIMAGE_FORMAT_BMP); //先装载bmp文件,需要指定文件类型 // 判断加载的bmp文件是否存在。 if (image.IsValid())......{ // Returns true if the image has 256 colors and a linear grey scale palette. if(!image.IsGrayScale()) image.IncreaseBpp(24); // param nbit: 4, 8, 24 image.SetJpegQuality(99); // 设置图像的压缩质量参数(从0到100,数值越大,质量越高) image.Save("image.jpg",CXIMAGE_FORMAT_JPG); // 把压缩后的图像以jpg文件类型保存起来。 }
打开图片的代码: 在 doc类中添加 公共变量 CxImage myImage 然后添加 OnFileOpen()的函数: void CimagetestDoc::OnFileOpen() { // TODO: 在此添加命令处理程序代码 //打开图像 CFileDialog fileOpenDlg(TRUE,"","*.jpg",NULL,"image File(*.*)",NULL); int nRespond=fileOpenDlg.DoModal(); if (nRespond==IDOK) { CString filePath=fileOpenDlg.GetPathName(); //CxImage myImage; myImage.Load(filePath,0);
}
}
保持jpg 图象
void CimagetestDoc::OnFileSave() { // TODO: 在此添加命令处理程序代码 CFileDialog fileSaveDlg(FALSE,"*.jpg","*.jpg",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"image File(*.jpg)",NULL); int nRespond=fileSaveDlg.DoModal(); if (nRespond==IDOK) { CString filePath=fileSaveDlg.GetPathName(); myImage.Save(filePath,CXIMAGE_FORMAT_JPG ); } }
另存为bmp格式的代码 :
void CimagetestView::OnFileSaveAs() { // TODO: 在此添加命令处理程序代码 CimagetestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; CFileDialog fileSaveDlg(FALSE,"*.jpg","bit_24.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"image File(*.bmp)",NULL); int nRespond=fileSaveDlg.DoModal(); if (nRespond==IDOK) { CString filePath=fileSaveDlg.GetPathName(); pDoc->myImage.Save(filePath,CXIMAGE_FORMAT_BMP ); } }
转灰度图像 在doc类中添加对灰度的响应函数: void CmyimageproceeDoc::OnCximageGrayscale() { myImage.GrayScale(); }
void CmyimageproceeDoc::OnUpdateCximageGrayscale(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代 UpdateAllViews(0);//刷新图片 }
还可以添加其他CxImage的函数
2 添加直方图的函数!
在view工具栏中添加 histogram 选项 设置ID为 ID_VIEW_HISTOGRAM
函数说明
1 亮度调整: bool Light(long brightness, long contrast = 0); brightness >0 亮度增加, <0 亮度 减少 , constrast 对比度的变化 用法: void CimageDoc::OnCximageLight() { // TODO: 在此添加命令处理程序代码 myImage.Light(-20,0); UpdateAllViews(0);
|