You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.9 KiB
C

1 month ago
#pragma once
#include "afxcoll.h"
#include <vector>
#include <string>
#include "CxImage/CxImage/ximage.h"
#include "..\Xy.h"
struct ColorPoint {
int R;
int G;
int B;
double zValue;
};
class AFX_EXT_CLASS GenerateImageMesh
{
public:
// <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
enum ColorMethod {
HSV_M = 0, //HSV<53><56><EFBFBD>˷<EFBFBD><CBB7><EFBFBD>
UNIFORMSAMPLING_M = 1, //<2F><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
KMEANS_M = 2 //K-Means<6E><73><EFBFBD><EFBFBD><E0B7BD>
};
// <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
enum SortMethod {
BRIGHTNESS_SORT = 0, //<2F><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)
HUE_SORT_COLD = 1, //ɫ<><C9AB><EFBFBD><EFBFBD>
HUE_SORT_WARM = 2, //ɫ<><C9AB>ů
HUE_SORT = 3
};
GenerateImageMesh();
~GenerateImageMesh();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SetImageBase(CxImage image);
void SetImageBase(const std::string& path);
std::string GetImagePath();
//<2F><><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><><C4AC>ɫ<EFBFBD><C9AB>)
void SetColorCardPath(const std::string& path);
std::string GetColorCardPath();
void SetGridNumber(int num);
int GetGridNumber();
void SetZminByZmax(double zMin, double zMax);
double GetZmin();
double GetZmax();
/**
* <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD>ʣ<EFBFBD>Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD>
* \param colorVectors <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>zֵ<EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>zֵ<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param ColorMethod <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* \param SortMethod <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* \param numColors <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \return
*/
bool CreateColorBarData(std::vector<ColorPoint>& colorPVector, GenerateImageMesh::ColorMethod type, GenerateImageMesh::SortMethod sortType, int numColors = 5);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
* \param colorVector <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>zֵ<EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>zֵ<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param barSavePath ɫ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>
* \param xmlPath ɫ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>xml
* \param width ɫ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͼƬ<EFBFBD><EFBFBD>
* \param height ɫ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͼƬ<EFBFBD><EFBFBD>
* \return
*/
bool CreateMeshColorBar(const std::vector<ColorPoint>& colorVector, const std::string& barSavePath, double minz, double maxz,
const std::string& xmlPath = "", int width = 1200, int height = 60);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMesh * CreateImageMeshProcess(int numX, int numY
, double dLocationX, double dLocationY
, double dDeltX, double dDeltY, double dmaxX, double dmaxY
, const std::vector<ColorPoint>& colorVector, const std::vector<ColorPoint>& colorListVector);
bool CreateImageMesh(int numX, int numY
, double dLocationX, double dLocationY, double dDeltX, double dDeltY , double dmaxX, double dmaxY,
const std::vector<ColorPoint>& colorVector);
double FindThirdValues(const std::vector<std::tuple<int, int, double>>& data,
int first, int second);
protected:
void Init();
bool LaodImageCV();//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
private:
int m_num; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>10 10*10<31><30>
double m_zMinCV; //<2F>ʼ<EEBFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
double m_zMaxCV;
std::string m_colorCardPath; //<2F><>ɫ<EFBFBD><C9AB>
std::string m_imagePath; //ͼ<><CDBC>
CxImage m_xImage; //<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
CMesh *p_mesh;
};