Ubuntu CxImage使用案例
导读:Ubuntu下CxImage使用案例精选 一 环境准备与安装 快速安装(推荐):使用系统包管理器安装开发包,自动解决依赖(如libpng、libjpeg等)。 命令:sudo apt update && sudo apt...
Ubuntu下CxImage使用案例精选
一 环境准备与安装
- 快速安装(推荐):使用系统包管理器安装开发包,自动解决依赖(如libpng、libjpeg等)。
- 命令:sudo apt update & & sudo apt install libcximage-dev
- 源码编译(可定制与获取最新特性):
- 安装依赖:sudo apt install build-essential cmake libpng-dev libjpeg-dev libtiff-dev libgif-dev zlib1g-dev
- 获取源码:git clone https://github.com/cximage/cximage.git
- 构建安装:mkdir build & & cd build & & cmake … & & make & & sudo make install
- 环境配置(源码安装后推荐):
- 写入环境变量:echo ‘export CPLUS_INCLUDE_PATH=/usr/local/include:$CPLUS_INCLUDE_PATH’ > > ~/.bashrc
- echo ‘export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH’ > > ~/.bashrc
- echo ‘export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH’ > > ~/.bashrc
- 使生效:source ~/.bashrc;必要时执行 sudo ldconfig 更新库缓存。
二 基础案例 格式转换与灰度化
- 目标:将输入图像转换为指定格式(如PNG→JPG),并进行灰度化处理。
- 代码示例(保存为 convert_gray.cpp):
- #include < cximage.h> #include int main() { CxImage image; if (!image.Load(“input.png”)) { std::cerr < < "Load failed: " < < image.GetLastError() < < std::endl; return 1; } image.GrayScale(); if (!image.Save(“output_gray.jpg”, CXIMAGE_FORMAT_JPG)) { std::cerr < < "Save failed: " < < image.GetLastError() < < std::endl; return 1; } std::cout < < “Saved: output_gray.jpg\n”; return 0; }
- 编译与运行:
- g++ convert_gray.cpp -o convert_gray -lcximage
- ./convert_gray
- 说明:
- Load 支持自动识别格式;Save 的第二个参数可显式指定输出格式(如 CXIMAGE_FORMAT_PNG/JPG/BMP/GIF)。
三 进阶案例 缩放旋转裁剪与文字绘制
- 目标:对图像进行缩放、旋转、裁剪与文字绘制等常见预处理。
- 代码示例(保存为 process_image.cpp):
-
#include < cximage.h> #include int main() { CxImage image; if (!image.Load(“input.jpg”)) return 1;
// 缩放:缩小到原尺寸的50%(双线性插值) image.Resample(image.GetWidth()/2, image.GetHeight()/2, **CXIMAGE_FILTER_BILINEAR**); // 旋转:顺时针90° image.Rotate90(); // 裁剪:从(100,100)开始,截取300×200区域 image.Crop(100, 100, 300, 300); // 文字:设置字体与颜色后绘制 image.SetFont("Arial", 20, CXFONT_WEIGHT_BOLD); image.SetTextColor(RGB(255, 0, 0)); // 红色 image.DrawString("Hello, CxImage!", 50, 50, 0, 0); if (!image.Save("processed.jpg")) return 1; std::cout < < "Saved: processed.jpg\n"; return 0;}
-
- 编译与运行:
- g++ process_image.cpp -o process_image -lcximage
- ./process_image
- 说明:
- 常用处理接口包括:Resample、Rotate/Rotate90、Crop、GrayScale、DrawString 等,可覆盖多数预处理需求。
四 实战案例 内存数据加载与透明通道处理
- 内存数据加载(网络/缓存场景)
- 代码示例(保存为 from_memory.cpp):
- #include < cximage.h> #include extern unsigned char g_image_data[]; // 假设已存在图像字节数组 extern long g_image_size; // 数据字节数 int main() { CxMemFile memfile(g_image_data, g_image_size); CxImage image(& memfile, CXIMAGE_FORMAT_JPG); // 显式指定格式 if (!image.IsValid()) return 1; image.Save(“from_mem.png”, CXIMAGE_FORMAT_PNG); std::cout < < “Saved from memory: from_mem.png\n”; return 0; }
- 编译与运行:g++ from_memory.cpp -o from_memory -lcximage & & ./from_memory
- 代码示例(保存为 from_memory.cpp):
- PNG透明通道处理
- 代码示例(保存为 alpha_demo.cpp):
- #include < cximage.h> #include int main() { CxImage image; if (!image.Load(“transparent.png”)) return 1; if (image.IsAlphaValid()) { std::cout < < “Has Alpha channel\n”; // 示例:将半透明像素统一设为半透明 for (long y = 0; y < image.GetHeight(); ++y) { for (long x = 0; x < image.GetWidth(); ++x) { RGBQUAD c = image.GetPixelColor(x, y); if (c.rgbReserved < 128) c.rgbReserved = 128; image.SetPixelColor(x, y, c); } } } // 注意:BMP不支持Alpha,若需保留透明,请保存为PNG/GIF等格式 image.Save(“with_alpha.png”, CXIMAGE_FORMAT_PNG); std::cout < < “Saved: with_alpha.png\n”; return 0; }
- 编译与运行:g++ alpha_demo.cpp -o alpha_demo -lcximage & & ./alpha_demo
- 代码示例(保存为 alpha_demo.cpp):
- 说明:
- CxMemFile 可直接从内存加载图像;处理透明通道时,请选择合适的输出格式(如 PNG)。
五 常见问题与排查
- 头文件或库找不到
- 确认安装了开发包(如 libcximage-dev);源码安装后检查 /usr/local/include/cximage.h 与 /usr/local/lib/libcximage.so。
- 在编译命令中添加头/库路径:g++ test.cpp -I/usr/local/include -L/usr/local/lib -lcximage。
- 链接错误 undefined reference
- 确保链接 -lcximage;若报 JPEG/PNG 等依赖未定义,补充链接相应库(如 -ljpeg -lpng -ltiff -lz)。
- 运行时找不到库
- 执行 sudo ldconfig;或在运行前导出 LD_LIBRARY_PATH=/usr/local/lib。
- 特定格式不支持
- 安装对应依赖(如 libgif-dev 支持 GIF,libtiff-dev 支持 TIFF),并在 Load/Save 时显式指定格式常量(如 CXIMAGE_FORMAT_GIF/TIFF)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu CxImage使用案例
本文地址: https://pptw.com/jishu/755614.html
