#pragma once
#include <string>
#include "ImageLoc.h"
#include <map>

#ifdef UNICODE 
using TString = std::wstring;
#else
using TString = std::string;
#endif

/*
此类为图像处理，包含以下工作
1.像素比较，查找
2.颜色转化
3.图像定位
4.简单OCR
5....
*/
class ImageProc :public ImageBase
{
public:
	const static int _max_dict = 10;

	ImageProc();
	~ImageProc();
	//
	long Capture(const TString& file);

	long CmpColor(long x, long y, const TString& scolor, double sim);

	long FindColor(const TString& color, double sim, long dir, long& x, long& y);

	long FindColoEx(const TString& color, double sim, long dir, TString& retstr);

	long FindMultiColor(const TString& first_color, const TString& offset_color, double sim, long dir, long& x, long& y);

	long FindMultiColorEx(const TString& first_color, const TString& offset_color, double sim, long dir, TString& retstr);
	//图形定位
	long FindPic(const TString& files, const TString& delta_colors, double sim, long dir, long& x, long& y);
	//
	long FindPicEx(const TString& files, const TString& delta_colors, double sim, long dir, TString& retstr, bool returnID = true);

	long FindColorBlock(const TString& color, double sim, long count, long height, long width, long& x, long& y);

	long FindColorBlockEx(const TString& color, double sim, long count, long height, long width, TString& retstr);

	TString GetColor(long x, long y);

	long FindLine(const TString& color, double sim, TString& retStr);

	long LoadPic(const TString& files);

	long FreePic(const TString& files);

	long LoadMemPic(const TString& file_name, void* data, long size);

public:
	//当前目录
	TString _curr_path;
	//图片缓存
	std::map<TString, Image> _pic_cache;
	//是否使用图片缓存，默认开启
	int _enable_cache;
	//tesseract::TessBaseAPI _tes;
private:
	//RETURN TYPE 0:word colors info; 1:bk color info
	int str2colordfs(const TString& color_str, std::vector<color_df_t>& colors);
	void str2colors(const TString& color, std::vector<color_t>& vcolor);
	void files2mats(const TString& files, std::vector<Image*>& vpic, std::vector<TString>& vstr);
};

