CxImage是一款开源、跨平台的C++图像处理库,专注于简化图像的加载、保存、转换及基础/高级处理操作。其设计目标是提供统一的API接口,覆盖从简单图像操作到复杂特效处理的多种需求,适用于桌面应用、多媒体软件、文档管理等场景。
CxImage在Ubuntu下原生支持BMP、JPEG、PNG、GIF、TIFF、TGA、PCX、ICO等常见格式,覆盖日常图像处理的90%以上需求。通过CXIMAGE_FORMAT_XXX枚举(如CXIMAGE_FORMAT_JPG、CXIMAGE_FORMAT_PNG),可轻松实现格式转换(例如将JPEG转为PNG)。
提供加载、保存、缩放、旋转、裁剪等常用功能:
Load()(指定路径+格式)和Save()(指定路径+格式)方法实现,支持从内存缓冲区加载(如CxImage(BYTE* buffer, DWORD size, DWORD imagetype));Resample()函数支持自定义宽高(如image.Resample(300, 0)表示宽度调整为300px,高度按比例自动计算),保持图像宽高比;Rotate()函数支持90°、180°、270°旋转,或自定义角度(需开启插值算法以保证质量);Selection设置ROI(感兴趣区域)后,调用Crop()函数提取指定区域。内置多种算法实现视觉效果增强:
GaussianBlur())、均值模糊(MeanBlur())及Unsharp Masking(USM)锐化(UnsharpMask()),用于去除噪声或增强边缘;AdjustBrightness()(亮度调整)、AdjustContrast()(对比度调整)、GrayScale()(转换为灰度图)等功能,满足基础色彩校正需求;ConvertToFormat(CXIMAGE_FORMAT_GRAY))。支持带Alpha通道的图像格式(如PNG、TGA),提供SetOpacity()函数调整透明度(0-255,0为完全透明),并支持高质量图像混合(如叠加两张带透明度的PNG图像)。
采用C++标准编写,遵循POSIX规范,在Ubuntu(Linux)系统上可无缝编译运行。与GTK、Qt等Ubuntu主流桌面环境兼容,便于集成到各类C++项目中(如Qt Widgets应用、GTKmm程序)。
通过插件机制扩展格式支持,无需修改核心代码即可添加新格式(如WebP、HEIC)。插件以动态库(.so文件)形式存在,加载时自动注册到CxImage框架中。
以CxImage类为核心接口,封装了图像数据(像素缓冲区、宽高、格式)及操作方法(如Load()、Save()、Rotate())。这种设计使得图像处理操作以方法调用的形式执行,降低了学习成本,提高了代码可维护性。
提供FreeMemory()函数释放动态分配的内存(如图像缓冲区),避免内存泄漏。建议在处理大图片时,先通过Resample()缩放再操作,减少内存占用。
sudo apt install libcximage-dev安装开发包,包含头文件(cximage.h)和库文件(libcximage.so);git clone https://github.com/cximage/cximage.git),进入源码目录执行mkdir build && cd build && cmake .. && make && sudo make install,将库安装到系统路径(如/usr/local/lib);~/.bashrc中添加export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH,并执行source ~/.bashrc使配置生效。#include <cximage.h>
#include <iostream>
int main() {
CxImage image;
// 加载JPEG图像
if (!image.Load("input.jpg", CXIMAGE_FORMAT_JPG)) {
std::cerr << "加载失败!" << std::endl;
return -1;
}
// 缩放至宽度300px(高度按比例调整)
if (!image.Resample(300, 0)) {
std::cerr << "缩放失败!" << std::endl;
return -1;
}
// 转换为灰度图
image.GrayScale();
// 保存为PNG格式
if (!image.Save("output.png", CXIMAGE_FORMAT_PNG)) {
std::cerr << "保存失败!" << std::endl;
return -1;
}
return 0;
}
编译时需链接CxImage库:g++ your_program.cpp -o your_program -lcximage。
libpng-dev、libjpeg-dev、libgif-dev等依赖库(通过sudo apt install libpng-dev libjpeg-dev libgif-dev),否则会导致编译失败;Load()、Save()等方法时,需检查返回值(true表示成功,false表示失败),避免因路径错误或权限问题导致程序崩溃;Resample()缩小尺寸,减少内存占用;避免频繁创建/销毁CxImage对象,可复用对象提高效率。