67 lines
1.5 KiB
C++
67 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include <opencv2/core.hpp>
|
|
|
|
template class __declspec(dllexport) std::shared_ptr<char>; // 消除警告C2451
|
|
|
|
|
|
// 图像编解码结果数据结构
|
|
struct XImageBytes {
|
|
std::shared_ptr<char> ptr;
|
|
size_t size;
|
|
};
|
|
|
|
// 图像编解码类型枚举
|
|
enum class XImageType {
|
|
QOI = 'q',
|
|
PNG = 'p',
|
|
BMP = 'b',
|
|
};
|
|
|
|
// 图像编解码类
|
|
class __declspec(dllexport) XImageCodecs {
|
|
|
|
public:
|
|
|
|
enum class ErrorCode {
|
|
OK = 0,
|
|
FileOpenError = -1,
|
|
FileReadError = -2,
|
|
FileWriteError = -3,
|
|
FileFormatError = -4,
|
|
EncodeError = -5,
|
|
DecodeError = -6,
|
|
SaveError = -7,
|
|
LoadError = -8,
|
|
TypeExtMismatch = -9,
|
|
};
|
|
|
|
struct Params {
|
|
XImageType imageType = XImageType::QOI; // 编码器类型
|
|
int threadNum = -1; // 线程数 小于等于0表示自动确定
|
|
};
|
|
|
|
XImageCodecs(Params params);
|
|
~XImageCodecs();
|
|
|
|
|
|
// 直接读写图片 -- 内部调用 编码解码 和 加载保存
|
|
ErrorCode read(const char* filename, cv::Mat& image);
|
|
ErrorCode write(const char* filename, const cv::Mat& image);
|
|
|
|
// 编码解码
|
|
ErrorCode encode(const cv::Mat& image, XImageBytes& bytes);
|
|
ErrorCode decode(cv::Mat& image, const XImageBytes& bytes);
|
|
|
|
// 加载和保存
|
|
ErrorCode load(const char* filename, XImageBytes& bytes);
|
|
ErrorCode save(const char* filename, const XImageBytes& bytes);
|
|
|
|
|
|
private:
|
|
|
|
Params params;
|
|
|
|
};
|