|
|
|
@ -10,19 +10,7 @@
|
|
|
|
|
#define FILE_CCD_IMAGE_INFO_PATH _T("ccd_image_info.csv")
|
|
|
|
|
#define FILE_CCD_DATAT_PATH _T("ccd_data_path.csv")
|
|
|
|
|
|
|
|
|
|
// 颜色定义
|
|
|
|
|
#define RED RGB(255, 0, 0)
|
|
|
|
|
#define ORANGE RGB(255, 165, 0)
|
|
|
|
|
#define YELLOW RGB(255, 255, 0)
|
|
|
|
|
#define GREEN RGB(0, 255, 0)
|
|
|
|
|
#define CYAN RGB(0, 255, 255)
|
|
|
|
|
#define BLUE RGB(0, 0, 255)
|
|
|
|
|
#define PURPLE RGB(128, 0, 128)
|
|
|
|
|
#define GREY RGB(169, 169, 169)
|
|
|
|
|
#define PINK RGB(255, 192, 203)
|
|
|
|
|
#define BLACK RGB(0, 0, 0)
|
|
|
|
|
#define WHITE RGB(255, 255, 255)
|
|
|
|
|
#define BROWN RGB(165, 42, 42)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 控件ID映射
|
|
|
|
|
const int minEnergyCtrlIds[] = { IDC_MIN_ENERGY_EDIT1, IDC_MIN_ENERGY_EDIT2, IDC_MIN_ENERGY_EDIT3,
|
|
|
|
@ -53,8 +41,8 @@ const TCHAR* colorNames[] = {
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
|
#endif
|
|
|
|
|
ColorSchemeManager m_colorSchemeManager;
|
|
|
|
|
std::map<const int, int> m_proportionEnergy;
|
|
|
|
|
//ColorSchemeManager m_colorSchemeManager;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
|
|
|
|
|
|
|
|
|
@ -171,11 +159,12 @@ void CCcdDataImageProcessingDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
|
|
|
|
|
|
|
DDX_Control(pDX, IDC_CCD_DATA_PATH_EDIT, m_CddDataPath);
|
|
|
|
|
|
|
|
|
|
DDX_Control(pDX, IDC_PIC_CTRL, m_PicCtrl);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CCcdDataImageProcessingDlg, CDialogEx)
|
|
|
|
|
ON_WM_SYSCOMMAND()
|
|
|
|
|
ON_WM_PAINT()
|
|
|
|
|
// ON_WM_PAINT()
|
|
|
|
|
ON_WM_QUERYDRAGICON()
|
|
|
|
|
ON_BN_CLICKED(IDC_IMAGE_INFO_SAVE_BUTTON, &CCcdDataImageProcessingDlg::OnBnClickedImageInfoSaveButton)
|
|
|
|
|
ON_BN_CLICKED(IDC_DLG_MIN_BUTTON, &CCcdDataImageProcessingDlg::OnBnClickedDlgMinButton)
|
|
|
|
@ -184,6 +173,7 @@ BEGIN_MESSAGE_MAP(CCcdDataImageProcessingDlg, CDialogEx)
|
|
|
|
|
ON_BN_CLICKED(IDC_SLECT_PATH_BUTTON, &CCcdDataImageProcessingDlg::OnBnClickedSlectPathButton)
|
|
|
|
|
ON_WM_PAINT()
|
|
|
|
|
ON_BN_CLICKED(IDC_SAVE_IMAGE_BUTTON, &CCcdDataImageProcessingDlg::OnBnClickedSaveImageButton)
|
|
|
|
|
ON_WM_TIMER()
|
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -223,7 +213,7 @@ BOOL CCcdDataImageProcessingDlg::OnInitDialog()
|
|
|
|
|
OnInitEnergyInfo();
|
|
|
|
|
OnInitCcdDataPath();
|
|
|
|
|
OnInitAll();
|
|
|
|
|
|
|
|
|
|
SetTimer(0, 500, NULL);
|
|
|
|
|
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -313,7 +303,7 @@ void CCcdDataImageProcessingDlg::OnBnClickedImageInfoSaveButton()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 提示保存成功
|
|
|
|
|
AfxMessageBox(_T("CCD图像颜色方案配比信息已保存!"));
|
|
|
|
|
//AfxMessageBox(_T("CCD图像颜色方案配比信息已保存!"),MB_TOPMOST);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -570,17 +560,9 @@ void CCcdDataImageProcessingDlg::OnBnClickedSlectPathButton()
|
|
|
|
|
|
|
|
|
|
void CCcdDataImageProcessingDlg::OnBnClickedImageGenerateButton()
|
|
|
|
|
{
|
|
|
|
|
// TODO: 执行
|
|
|
|
|
// 清除上一次的绘制内容
|
|
|
|
|
m_data.clear(); // 清空之前的数据
|
|
|
|
|
|
|
|
|
|
CWaitCursor wait;
|
|
|
|
|
CString cddDataPathInfo;
|
|
|
|
|
GetDlgItemText(IDC_CCD_DATA_PATH_EDIT, cddDataPathInfo);
|
|
|
|
|
CStringA cstrA(cddDataPathInfo); // 将 CString 转换为 CStringA
|
|
|
|
|
std::string stdStr = cstrA.GetString(); // 将 CStringA 转换为 std::string
|
|
|
|
|
CFileMgr fileMgr;
|
|
|
|
|
fileMgr.ReadFileToStrVec(stdStr, m_data); // 假设文件名是 energy_data.csv
|
|
|
|
|
|
|
|
|
|
m_colorSchemeManager.addScheme("Scheme1"); // 添加多个颜色方案
|
|
|
|
|
//---获取所有方案参数--------------------------------------------
|
|
|
|
|
|
|
|
|
@ -620,42 +602,42 @@ void CCcdDataImageProcessingDlg::OnBnClickedImageGenerateButton()
|
|
|
|
|
float maxEnergyValue = _tstof(maxEnergy); // 转换为 float
|
|
|
|
|
|
|
|
|
|
// 设置颜色
|
|
|
|
|
COLORREF color = WHITE; // 默认颜色为白色
|
|
|
|
|
COLORREF color = RGB_WHITE; // 默认颜色为白色
|
|
|
|
|
if (colorCombo == colorNames[0]) { // Red
|
|
|
|
|
color = RED;
|
|
|
|
|
color = RGB_RED;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[1]) { // Orange
|
|
|
|
|
color = ORANGE;
|
|
|
|
|
color = RGB_ORANGE;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[2]) { // Yellow
|
|
|
|
|
color = YELLOW;
|
|
|
|
|
color = RGB_YELLOW;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[3]) { // Green
|
|
|
|
|
color = GREEN;
|
|
|
|
|
color = RGB_GREEN;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[4]) { // Cyan
|
|
|
|
|
color = CYAN;
|
|
|
|
|
color = RGB_CYAN;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[5]) { // Blue
|
|
|
|
|
color = BLUE;
|
|
|
|
|
color = RGB_BLUE;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[6]) { // Purple
|
|
|
|
|
color = PURPLE;
|
|
|
|
|
color = RGB_PURPLE;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[7]) { // Grey
|
|
|
|
|
color = GREY;
|
|
|
|
|
color = RGB_GREY;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[8]) { // Pink
|
|
|
|
|
color = PINK;
|
|
|
|
|
color = RGB_PINK;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[9]) { // Black
|
|
|
|
|
color = BLACK;
|
|
|
|
|
color = RGB_BLACK;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[10]) { // White
|
|
|
|
|
color = WHITE;
|
|
|
|
|
color = RGB_WHITE;
|
|
|
|
|
}
|
|
|
|
|
else if (colorCombo == colorNames[11]) { // Brown
|
|
|
|
|
color = BROWN;
|
|
|
|
|
color = RGB_BROWN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 根据选择的能量区间添加范围
|
|
|
|
@ -667,143 +649,154 @@ void CCcdDataImageProcessingDlg::OnBnClickedImageGenerateButton()
|
|
|
|
|
|
|
|
|
|
//---画图--------------------------------------------------------
|
|
|
|
|
m_colorSchemeManager.setCurrentScheme("Scheme1"); // 设置当前颜色方案为 Scheme1
|
|
|
|
|
gCsvToImg->m_colorSchemeManager = m_colorSchemeManager;
|
|
|
|
|
gCsvToImg->ReadCsv2Img(cddDataPathInfo);
|
|
|
|
|
|
|
|
|
|
// 重绘对话框并强制刷新
|
|
|
|
|
Invalidate(); // 标记窗口为无效区域
|
|
|
|
|
UpdateWindow(); // 立即刷新窗口
|
|
|
|
|
printf("11");
|
|
|
|
|
auto Db2CString=[](float val)
|
|
|
|
|
{
|
|
|
|
|
CString str;
|
|
|
|
|
str.Format("%.3f", val);
|
|
|
|
|
return str;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
auto ¤tScheme = gCsvToImg->m_colorSchemeManager.currentScheme;
|
|
|
|
|
|
|
|
|
|
//CEdit 控件中的占比值 (没全部启用时会抛异常)
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
m_ProportionEnergy1.SetWindowText(Db2CString(currentScheme->ranges.at(0).dPercent));
|
|
|
|
|
m_ProportionEnergy2.SetWindowText(Db2CString(currentScheme->ranges.at(1).dPercent));
|
|
|
|
|
m_ProportionEnergy3.SetWindowText(Db2CString(currentScheme->ranges.at(2).dPercent));
|
|
|
|
|
m_ProportionEnergy4.SetWindowText(Db2CString(currentScheme->ranges.at(3).dPercent));
|
|
|
|
|
m_ProportionEnergy5.SetWindowText(Db2CString(currentScheme->ranges.at(4).dPercent));
|
|
|
|
|
m_ProportionEnergy6.SetWindowText(Db2CString(currentScheme->ranges.at(5).dPercent));
|
|
|
|
|
m_ProportionEnergy7.SetWindowText(Db2CString(currentScheme->ranges.at(6).dPercent));
|
|
|
|
|
m_ProportionEnergy8.SetWindowText(Db2CString(currentScheme->ranges.at(7).dPercent));
|
|
|
|
|
m_ProportionEnergy9.SetWindowText(Db2CString(currentScheme->ranges.at(8).dPercent));
|
|
|
|
|
m_ProportionEnergy10.SetWindowText(Db2CString(currentScheme->ranges.at(9).dPercent));
|
|
|
|
|
}
|
|
|
|
|
catch (...){}
|
|
|
|
|
|
|
|
|
|
UpdateWindow();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 根据能量值设置颜色
|
|
|
|
|
COLORREF CCcdDataImageProcessingDlg::GetColorFromEnergy(float energy)
|
|
|
|
|
{
|
|
|
|
|
if (m_colorSchemeManager.currentScheme == nullptr) {
|
|
|
|
|
return WHITE;
|
|
|
|
|
return RGB_WHITE;
|
|
|
|
|
}
|
|
|
|
|
return m_colorSchemeManager.currentScheme->getColor(energy);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CCcdDataImageProcessingDlg::OnPaint()
|
|
|
|
|
{
|
|
|
|
|
CPaintDC dc(this); // 设备上下文
|
|
|
|
|
CRect clientRect;
|
|
|
|
|
GetClientRect(&clientRect); // 获取客户区域矩形
|
|
|
|
|
|
|
|
|
|
// 设置背景色
|
|
|
|
|
dc.FillSolidRect(clientRect, RGB(255, 255, 255));
|
|
|
|
|
|
|
|
|
|
// 设置字体
|
|
|
|
|
CFont font;
|
|
|
|
|
font.CreatePointFont(120, _T("Arial"));
|
|
|
|
|
dc.SelectObject(&font);
|
|
|
|
|
|
|
|
|
|
// 计算矩阵的行数和列数
|
|
|
|
|
int numRows = m_data.size();
|
|
|
|
|
int numCols = (numRows > 0) ? m_data[0].size() : 0;
|
|
|
|
|
|
|
|
|
|
// 如果数据为空,提前返回
|
|
|
|
|
if (numRows == 0 || numCols == 0) {
|
|
|
|
|
dc.TextOut(10, 10, _T("No data available"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取窗口的宽度和高度
|
|
|
|
|
int maxImageWidth = clientRect.Width(); // 使用窗口的宽度
|
|
|
|
|
int maxImageHeight = clientRect.Height(); // 使用窗口的高度
|
|
|
|
|
|
|
|
|
|
// 计算每个数据块的大小(正方形)
|
|
|
|
|
float pointSize;
|
|
|
|
|
if (numCols > 0) {
|
|
|
|
|
// 根据列数和窗口宽度动态计算每个数据块的大小
|
|
|
|
|
float maxPointSizeWidth = static_cast<float>(maxImageWidth) / numCols; // 计算每个数据块在宽度上的最大大小
|
|
|
|
|
pointSize = static_cast<int>(maxPointSizeWidth); // 选择宽度限制的大小
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pointSize = 10; // 默认大小
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 计算最大高度可用空间,动态计算每个数据块的高度
|
|
|
|
|
int pointSizeHeight;
|
|
|
|
|
if (numRows > 0) {
|
|
|
|
|
// 根据行数和窗口高度动态计算每个数据块的大小
|
|
|
|
|
float maxPointSizeHeight = static_cast<float>(maxImageHeight) / numRows; // 计算每个数据块在高度上的最大大小
|
|
|
|
|
pointSizeHeight = static_cast<int>(maxPointSizeHeight); // 选择高度限制的大小
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pointSizeHeight = 10; // 默认大小
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 取最小值,确保数据点能够适应窗口
|
|
|
|
|
if (pointSize > pointSizeHeight)pointSize = pointSizeHeight;
|
|
|
|
|
|
|
|
|
|
// 如果计算出的 pointSize 太小,设置一个最小值
|
|
|
|
|
if (pointSize < 0.5) {
|
|
|
|
|
pointSize = 0.5; // 确保每个数据点至少为 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 计算偏移量,使图像右贴右边,上边贴上边
|
|
|
|
|
int offsetX = 0;
|
|
|
|
|
int offsetY = 0;
|
|
|
|
|
|
|
|
|
|
// 遍历并绘制每个数据点
|
|
|
|
|
for (int row = 0; row < numRows; ++row) {
|
|
|
|
|
for (int col = 0; col < numCols; ++col) {
|
|
|
|
|
// 确保每个元素都有效
|
|
|
|
|
if (row < m_data.size() && col < m_data[row].size()) {
|
|
|
|
|
try {
|
|
|
|
|
float energy = std::stof(m_data[row][col]); // 将字符串转换为浮动数
|
|
|
|
|
|
|
|
|
|
// 数据统计
|
|
|
|
|
if (energy < m_minEnergy) m_minEnergy = energy; // 更新最小值
|
|
|
|
|
if (energy > m_maxEnergy) m_maxEnergy = energy; // 更新最大值
|
|
|
|
|
|
|
|
|
|
m_NumEnergy++;
|
|
|
|
|
|
|
|
|
|
// 获取能量值对应的颜色
|
|
|
|
|
COLORREF color = GetColorFromEnergy(energy);
|
|
|
|
|
dc.SetDCBrushColor(color); // 设置画刷颜色
|
|
|
|
|
|
|
|
|
|
// 计算当前数据点位置(添加偏移量)
|
|
|
|
|
float scaledX = col * pointSize + offsetX;
|
|
|
|
|
float scaledY = row * pointSize + offsetY;
|
|
|
|
|
|
|
|
|
|
// 绘制正方形数据块
|
|
|
|
|
CRect rect(scaledX, scaledY, scaledX + pointSize, scaledY + pointSize);
|
|
|
|
|
dc.FillSolidRect(rect, color);
|
|
|
|
|
}
|
|
|
|
|
catch (const std::invalid_argument& e) {
|
|
|
|
|
// 处理无效的字符串,设置默认值或跳过
|
|
|
|
|
continue; // 如果数据无法转换为 float,跳过当前元素
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 显示最大最小能量值
|
|
|
|
|
CString str;
|
|
|
|
|
str.Format(_T("Min Energy: %.2f, Max Energy: %.2f"), m_minEnergy, m_maxEnergy);
|
|
|
|
|
dc.TextOut(0, 1300, str);
|
|
|
|
|
UpProportionEnergy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
COLORREF ColorScheme::getColor(float energy)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
for (const auto& range : ranges) {
|
|
|
|
|
if (energy >= range.minEnergy && energy <= range.maxEnergy) {
|
|
|
|
|
|
|
|
|
|
//HWND hwd = (HWND)range.proportionEnergy;
|
|
|
|
|
//CString str;
|
|
|
|
|
//GetDlgItemText(range.proportionEnergy, str); // 获取控件指针
|
|
|
|
|
m_proportionEnergy[range.proportionEnergy]++;
|
|
|
|
|
return range.color;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return WHITE; // 默认返回白色
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//void CCcdDataImageProcessingDlg::OnPaint()
|
|
|
|
|
//{
|
|
|
|
|
//
|
|
|
|
|
//
|
|
|
|
|
// gCsvToImg->ShowLastImg(&m_PicCtrl);
|
|
|
|
|
// return;
|
|
|
|
|
//
|
|
|
|
|
// CPaintDC dc(this); // 设备上下文
|
|
|
|
|
// CRect clientRect;
|
|
|
|
|
// GetClientRect(&clientRect); // 获取客户区域矩形
|
|
|
|
|
//
|
|
|
|
|
// // 设置背景色
|
|
|
|
|
// dc.FillSolidRect(clientRect, RGB(255, 255, 255));
|
|
|
|
|
//
|
|
|
|
|
// // 设置字体
|
|
|
|
|
// CFont font;
|
|
|
|
|
// font.CreatePointFont(120, _T("Arial"));
|
|
|
|
|
// dc.SelectObject(&font);
|
|
|
|
|
//
|
|
|
|
|
// // 计算矩阵的行数和列数
|
|
|
|
|
// int numRows = m_data.size();
|
|
|
|
|
// int numCols = (numRows > 0) ? m_data[0].size() : 0;
|
|
|
|
|
//
|
|
|
|
|
// // 如果数据为空,提前返回
|
|
|
|
|
// if (numRows == 0 || numCols == 0) {
|
|
|
|
|
// dc.TextOut(10, 10, _T("No data available"));
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// // 获取窗口的宽度和高度
|
|
|
|
|
// int maxImageWidth = clientRect.Width(); // 使用窗口的宽度
|
|
|
|
|
// int maxImageHeight = clientRect.Height(); // 使用窗口的高度
|
|
|
|
|
//
|
|
|
|
|
// // 计算每个数据块的大小(正方形)
|
|
|
|
|
// float pointSize;
|
|
|
|
|
// if (numCols > 0) {
|
|
|
|
|
// // 根据列数和窗口宽度动态计算每个数据块的大小
|
|
|
|
|
// float maxPointSizeWidth = static_cast<float>(maxImageWidth) / numCols; // 计算每个数据块在宽度上的最大大小
|
|
|
|
|
// pointSize = static_cast<int>(maxPointSizeWidth); // 选择宽度限制的大小
|
|
|
|
|
// }
|
|
|
|
|
// else {
|
|
|
|
|
// pointSize = 10; // 默认大小
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// // 计算最大高度可用空间,动态计算每个数据块的高度
|
|
|
|
|
// int pointSizeHeight;
|
|
|
|
|
// if (numRows > 0) {
|
|
|
|
|
// // 根据行数和窗口高度动态计算每个数据块的大小
|
|
|
|
|
// float maxPointSizeHeight = static_cast<float>(maxImageHeight) / numRows; // 计算每个数据块在高度上的最大大小
|
|
|
|
|
// pointSizeHeight = static_cast<int>(maxPointSizeHeight); // 选择高度限制的大小
|
|
|
|
|
// }
|
|
|
|
|
// else {
|
|
|
|
|
// pointSizeHeight = 10; // 默认大小
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// // 取最小值,确保数据点能够适应窗口
|
|
|
|
|
// if (pointSize > pointSizeHeight)pointSize = pointSizeHeight;
|
|
|
|
|
//
|
|
|
|
|
// // 如果计算出的 pointSize 太小,设置一个最小值
|
|
|
|
|
// if (pointSize < 0.5) {
|
|
|
|
|
// pointSize = 0.5; // 确保每个数据点至少为 1
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// // 计算偏移量,使图像右贴右边,上边贴上边
|
|
|
|
|
// int offsetX = 0;
|
|
|
|
|
// int offsetY = 0;
|
|
|
|
|
//
|
|
|
|
|
// // 遍历并绘制每个数据点
|
|
|
|
|
// for (int row = 0; row < numRows; ++row) {
|
|
|
|
|
// for (int col = 0; col < numCols; ++col) {
|
|
|
|
|
// // 确保每个元素都有效
|
|
|
|
|
// if (row < m_data.size() && col < m_data[row].size()) {
|
|
|
|
|
// try {
|
|
|
|
|
// float energy = std::stof(m_data[row][col]); // 将字符串转换为浮动数
|
|
|
|
|
//
|
|
|
|
|
// // 数据统计
|
|
|
|
|
// if (energy < m_minEnergy) m_minEnergy = energy; // 更新最小值
|
|
|
|
|
// if (energy > m_maxEnergy) m_maxEnergy = energy; // 更新最大值
|
|
|
|
|
//
|
|
|
|
|
// m_NumEnergy++;
|
|
|
|
|
//
|
|
|
|
|
// // 获取能量值对应的颜色
|
|
|
|
|
// COLORREF color = GetColorFromEnergy(energy);
|
|
|
|
|
// dc.SetDCBrushColor(color); // 设置画刷颜色
|
|
|
|
|
//
|
|
|
|
|
// // 计算当前数据点位置(添加偏移量)
|
|
|
|
|
// float scaledX = col * pointSize + offsetX;
|
|
|
|
|
// float scaledY = row * pointSize + offsetY;
|
|
|
|
|
//
|
|
|
|
|
// // 绘制正方形数据块
|
|
|
|
|
// CRect rect(scaledX, scaledY, scaledX + pointSize, scaledY + pointSize);
|
|
|
|
|
// dc.FillSolidRect(rect, color);
|
|
|
|
|
// }
|
|
|
|
|
// catch (const std::invalid_argument& e) {
|
|
|
|
|
// // 处理无效的字符串,设置默认值或跳过
|
|
|
|
|
// continue; // 如果数据无法转换为 float,跳过当前元素
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// // 显示最大最小能量值
|
|
|
|
|
// CString str;
|
|
|
|
|
// str.Format(_T("Min Energy: %.2f, Max Energy: %.2f"), m_minEnergy, m_maxEnergy);
|
|
|
|
|
// dc.TextOut(0, 1300, str);
|
|
|
|
|
// UpProportionEnergy();
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
void CCcdDataImageProcessingDlg::OnBnClickedSaveImageButton()
|
|
|
|
|
{
|
|
|
|
@ -815,7 +808,8 @@ void CCcdDataImageProcessingDlg::OnBnClickedSaveImageButton()
|
|
|
|
|
CString savePath = saveFileDlg.GetPathName();
|
|
|
|
|
|
|
|
|
|
// 2. 调用图像保存函数
|
|
|
|
|
SaveImage(savePath);
|
|
|
|
|
gCsvToImg->SaveLastImg(savePath);
|
|
|
|
|
//SaveImage(savePath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -851,3 +845,14 @@ void CCcdDataImageProcessingDlg::SaveImage(const CString& savePath)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CCcdDataImageProcessingDlg::OnTimer(UINT_PTR nIDEvent)
|
|
|
|
|
{
|
|
|
|
|
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
|
|
|
|
gCsvToImg->ShowLastImg(&m_PicCtrl);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CDialogEx::OnTimer(nIDEvent);
|
|
|
|
|
}
|
|
|
|
|