Ubuntu 下使用 CxImage 导入图片
一 准备环境
二 最简示例代码
#include "ximage.h"
#include <iostream>
int main() {
CxImage image;
// 支持直接传入文件路径,内部会按扩展名选择解码器
if (!image.Load("input.jpg")) {
std::cerr << "无法加载图像: input.jpg" << std::endl;
return 1;
}
std::cout << "宽: " << image.GetWidth()
<< " 高: " << image.GetHeight()
<< " 格式: " << image.GetFormatStr() << std::endl;
// 示例:另存为 PNG
if (!image.Save("output.png", CXIMAGE_FORMAT_PNG)) {
std::cerr << "保存失败: output.png" << std::endl;
return 1;
}
return 0;
}
pkg-config --cflags --libs cximage三 从内存加载图片
#include "ximage.h"
#include <vector>
#include <iostream>
// 从内存缓冲区加载(已知格式)
bool loadFromMemory(CxImage& img, const std::vector<uint8_t>& buf, int fmt) {
CxMemFile mem((BYTE*)buf.data(), (DWORD)buf.size());
return img.Decode(&mem, fmt);
}
// 从内存缓冲区加载(自动探测格式)
bool loadFromMemoryAuto(CxImage& img, const std::vector<uint8_t>& buf) {
CxMemFile mem((BYTE*)buf.data(), (DWORD)buf.size());
return img.Load(&mem); // 自动识别
}
int main() {
std::vector<uint8_t> data = /* 你的图像字节数据 */;
CxImage image;
// 方式A:已知格式
// if (loadFromMemory(image, data, CXIMAGE_FORMAT_PNG)) { ... }
// 方式B:自动探测
if (loadFromMemoryAuto(image, data)) {
std::cout << "内存加载成功: " << image.GetWidth() << "x" << image.GetHeight() << std::endl;
image.Save("from_mem.png", CXIMAGE_FORMAT_PNG);
} else {
std::cerr << "内存加载失败" << std::endl;
}
return 0;
}
四 常见问题与排查