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.

127 lines
2.8 KiB
C++

#pragma once
#include <sstream>
#include <fstream>
#include <vector>
#include <map>
#define RGB_WHITE RGB(255, 255, 255) // 定义 WHITE 颜色
// 颜色定义
#define RGB_RED RGB(255, 0, 0)
#define RGB_ORANGE RGB(255, 165, 0)
#define RGB_YELLOW RGB(255, 255, 0)
#define RGB_GREEN RGB(0, 255, 0)
#define RGB_CYAN RGB(0, 255, 255)
#define RGB_BLUE RGB(0, 0, 255)
#define RGB_PURPLE RGB(128, 0, 128)
#define RGB_GREY RGB(169, 169, 169)
#define RGB_PINK RGB(255, 192, 203)
#define RGB_BLACK RGB(0, 0, 0)
#define RGB_WHITE RGB(255, 255, 255)
#define RGB_BROWN RGB(165, 42, 42)
using namespace std;
extern std::map<const int, int> m_proportionEnergy;
// 颜色范围结构体
struct ColorRange
{
float minEnergy=0;
float maxEnergy=0;
COLORREF color;
const int proportionEnergy=0;
ColorRange(float minE, float maxE, COLORREF col, const int proportionE)
: minEnergy(minE), maxEnergy(maxE), color(col), proportionEnergy(proportionE) {}
int Cnt = 0;
static int AllCnt ;
float dPercent = 0;
};
// 颜色方案类
class ColorScheme {
public:
std::string name; // 方案的名称
std::vector<ColorRange> ranges; // 存储能量范围和对应的颜色
// 默认构造函数
ColorScheme() : name("") {}
// 带参数构造函数
ColorScheme(std::string schemeName) : name(schemeName) {}
// 添加能量范围
void addRange(float minEnergy, float maxEnergy, COLORREF color, const int proportionEnergy)
{
ranges.emplace_back( minEnergy, maxEnergy, color ,proportionEnergy);
}
// 根据能量值返回对应的颜色
COLORREF getColor(float energy)
{
for (auto& range : ranges) {
if (energy >= range.minEnergy && energy <= range.maxEnergy)
{
m_proportionEnergy[range.proportionEnergy]++;
range.Cnt++;
ColorRange::AllCnt++;
return range.color;
}
}
ColorRange::AllCnt++;
return RGB_WHITE; // 默认返回白色
}
void RestRangeCnt()
{
ColorRange::AllCnt = 0;
for (auto& range : ranges)
{
range.Cnt = 0;
}
}
void CalRangesPercent()
{
for (auto& range : ranges)
{
range.dPercent = double(range.Cnt*100) / ColorRange::AllCnt;
}
}
};
// 颜色方案管理类
class ColorSchemeManager
{
public:
std::map<std::string, ColorScheme> schemes;
ColorScheme* currentScheme;
ColorSchemeManager() : currentScheme(nullptr) {}
void addScheme(const std::string& name)
{
schemes[name] = ColorScheme(name);
}
void setCurrentScheme(const std::string& name)
{
currentScheme = &schemes[name];
}
};
class CCsvToImg
{
public:
CCsvToImg();
virtual ~CCsvToImg();
bool ReadCsv2Img(CString CsvPath);
bool ShowLastImg(CWnd * pSHowWnd);
bool SaveLastImg(const CString& savePath);
private:
int * GetCsvData(const char * path, int & Rows, int & Cols);
bool CreateImgFromData(int * pDataOrg, int Rows, int Cols, CImage & OutImg);
CCriticalSection m_Section;
public:
ColorSchemeManager m_colorSchemeManager;
CImage m_Img;
};
extern CCsvToImg * gCsvToImg;