diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs
index f822847..8646803 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs
@@ -46,6 +46,7 @@ namespace JoyD.Windows.CS
this.btnBrushSize10 = new System.Windows.Forms.ToolStripButton();
this.btnBrushSize15 = new System.Windows.Forms.ToolStripButton();
this.btnBrushSize25 = new System.Windows.Forms.ToolStripButton();
+ this.btnEraseTempDiff = new System.Windows.Forms.ToolStripButton();
((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
this.splitContainer.Panel1.SuspendLayout();
this.splitContainer.Panel2.SuspendLayout();
@@ -147,12 +148,14 @@ namespace JoyD.Windows.CS
this.btnDrawTempDiff,
this.btnAddTempDiff,
this.btnDeleteTempDiff,
+ new System.Windows.Forms.ToolStripSeparator(),
this.btnBrushSize1,
this.btnBrushSize3,
this.btnBrushSize5,
this.btnBrushSize10,
this.btnBrushSize15,
- this.btnBrushSize25});
+ this.btnBrushSize25,
+ this.btnEraseTempDiff});
this.toolStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow;
this.toolStrip.Location = new System.Drawing.Point(3, 0);
this.toolStrip.MaximumSize = new System.Drawing.Size(0, 100);
@@ -284,6 +287,16 @@ namespace JoyD.Windows.CS
this.btnBrushSize25.ToolTipText = "选择25像素画笔";
this.btnBrushSize25.Click += new System.EventHandler(this.BtnBrushSize25_Click);
//
+ // btnEraseTempDiff
+ //
+ this.btnEraseTempDiff.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.btnEraseTempDiff.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btnEraseTempDiff.Name = "btnEraseTempDiff";
+ this.btnEraseTempDiff.Size = new System.Drawing.Size(23, 4);
+ this.btnEraseTempDiff.Text = "擦除温差图";
+ this.btnEraseTempDiff.ToolTipText = "使用透明色擦除温差图";
+ this.btnEraseTempDiff.Click += new System.EventHandler(this.BtnEraseTempDiff_Click);
+ //
// Setting
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
@@ -332,6 +345,7 @@ namespace JoyD.Windows.CS
private System.Windows.Forms.ToolStripButton btnBrushSize10;
private System.Windows.Forms.ToolStripButton btnBrushSize15;
private System.Windows.Forms.ToolStripButton btnBrushSize25;
+ private System.Windows.Forms.ToolStripButton btnEraseTempDiff;
private System.Windows.Forms.DataGridView dataGridViewTempDiff;
}
}
\ No newline at end of file
diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs
index e8c4365..64c08f3 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs
@@ -57,6 +57,7 @@ namespace JoyD.Windows.CS
private Point _lastDrawPoint = Point.Empty; // 上一个绘制点的位置
private bool _isDrawingRectangle = false; // 是否正在绘制矩形
private Point _rectangleStartPoint = Point.Empty; // 矩形起始点
+ private bool _isEraseMode = false; // 擦除模式标志
public Setting()
{
@@ -80,13 +81,18 @@ namespace JoyD.Windows.CS
// 初始隐藏删除按钮
try
- {
+ {
btnDeleteRegion.Visible = false;
// 初始状态/就绪状态下显示温差图按钮
btnDrawTempDiff.Visible = true;
// 初始状态下隐藏添加和删除温差图例按钮
btnAddTempDiff.Visible = false;
btnDeleteTempDiff.Visible = false;
+ // 初始化擦除按钮并设置为隐藏
+ if (btnEraseTempDiff != null)
+ {
+ btnEraseTempDiff.Visible = false;
+ }
}
catch (Exception ex)
{
@@ -157,12 +163,43 @@ namespace JoyD.Windows.CS
/// 25像素画笔大小按钮点击事件
///
private void BtnBrushSize25_Click(object sender, EventArgs e)
- {
+ {
_currentBrushSize = 25;
// 更新按钮选中状态
UpdateBrushSizeButtonSelection(25);
}
+ ///
+ /// 擦除温差图按钮点击事件
+ ///
+ private void BtnEraseTempDiff_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ // 切换擦除模式
+ _isEraseMode = !_isEraseMode;
+ btnEraseTempDiff.Checked = _isEraseMode;
+
+ if (_isEraseMode)
+ {
+ btnEraseTempDiff.ToolTipText = "擦除模式已启用,点击图片区域进行擦除(点击关闭)";
+ }
+ else
+ {
+ btnEraseTempDiff.ToolTipText = "使用透明色擦除温差图";
+ }
+
+ // 重置上一个绘制点,确保下一次绘制/擦除是新的起点
+ _lastDrawPoint = Point.Empty;
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("擦除模式切换失败: " + ex.Message);
+ _isEraseMode = false;
+ btnEraseTempDiff.Checked = false;
+ }
+ }
+
///
/// 创建表示画笔大小的图标
///
@@ -708,6 +745,7 @@ namespace JoyD.Windows.CS
dataGridViewTempDiff.Visible = false; // 隐藏温差图例表格
btnAddTempDiff.Visible = false; // 隐藏添加温差图例按钮
btnDeleteTempDiff.Visible = false; // 隐藏删除温差图例按钮
+ btnEraseTempDiff.Visible = false; // 隐藏擦除按钮
// 隐藏所有画笔大小按钮
btnBrushSize1.Visible = false;
btnBrushSize3.Visible = false;
@@ -729,6 +767,7 @@ namespace JoyD.Windows.CS
dataGridViewTempDiff.Visible = false; // 隐藏温差图例表格
btnAddTempDiff.Visible = false; // 隐藏添加温差图例按钮
btnDeleteTempDiff.Visible = false; // 隐藏删除温差图例按钮
+ btnEraseTempDiff.Visible = false; // 隐藏擦除按钮
// 隐藏所有画笔大小按钮
btnBrushSize1.Visible = false;
btnBrushSize3.Visible = false;
@@ -750,6 +789,7 @@ namespace JoyD.Windows.CS
dataGridViewTempDiff.Visible = false; // 隐藏温差图例表格
btnAddTempDiff.Visible = false; // 隐藏添加温差图例按钮
btnDeleteTempDiff.Visible = false; // 隐藏删除温差图例按钮
+ btnEraseTempDiff.Visible = false; // 隐藏擦除按钮
// 隐藏所有画笔大小按钮
btnBrushSize1.Visible = false;
btnBrushSize3.Visible = false;
@@ -771,6 +811,7 @@ namespace JoyD.Windows.CS
dataGridViewTempDiff.Visible = true; // 显示温差图例表格
btnAddTempDiff.Visible = true; // 显示添加温差图例按钮
btnDeleteTempDiff.Visible = true; // 显示删除温差图例按钮
+ btnEraseTempDiff.Visible = true; // 显示擦除按钮
// 初始隐藏画笔大小按钮,等待用户选择温差图例后在SelectionChanged事件中显示
btnBrushSize1.Visible = false;
btnBrushSize3.Visible = false;
@@ -884,11 +925,13 @@ namespace JoyD.Windows.CS
/// 退出温差图绘制模式
///
private void ExitTempDiffDrawingMode()
- {
+ {
// 重置上一个绘制点
_lastDrawPoint = Point.Empty;
_isTempDiffDrawingMode = false;
btnDrawTempDiff.Checked = false;
+ _isEraseMode = false; // 重置擦除模式
+ btnEraseTempDiff.Checked = false;
// 重置鼠标光标并安全释放自定义光标资源
try
@@ -904,17 +947,28 @@ namespace JoyD.Windows.CS
currentCursor.Dispose();
}
else if (currentCursor != Cursors.Default)
- {
+ {
// 如果是系统光标,直接设置为默认光标
picBoxTemp.Cursor = Cursors.Default;
}
- }
- catch (Exception ex)
- {
+ }
+ catch (Exception ex)
+ {
Console.WriteLine("重置光标资源时发生异常: " + ex.Message);
+ }
+
+ // 更新按钮提示文本
+ try
+ {
+ btnDrawTempDiff.ToolTipText = "绘制温差图";
+ btnEraseTempDiff.ToolTipText = "使用透明色擦除温差图";
// 确保光标设置为默认值
picBoxTemp.Cursor = Cursors.Default;
}
+ catch (Exception ex)
+ {
+ Console.WriteLine("更新按钮提示文本时发生异常: " + ex.Message);
+ }
// 更新按钮提示文本
btnDrawTempDiff.ToolTipText = "绘制温差图";
@@ -1207,17 +1261,17 @@ namespace JoyD.Windows.CS
catch {}
}
- // 处理矩形绘制(按住Ctrl键)
+ // 处理矩形绘制/擦除(按住Ctrl键)
if (_isDrawingRectangle && e.Button == MouseButtons.Left && picBoxTemp.Image != null)
- {
+ {
// 获取相对于图像的当前坐标
Point currentImagePoint = ControlPointToImagePoint(e.Location);
// 创建临时位图用于双重缓冲,避免闪烁
using (Bitmap tempBitmap = new Bitmap(_tempDiffOverlayImage))
- {
+ {
using (Graphics g = Graphics.FromImage(tempBitmap))
- {
+ {
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
@@ -1228,22 +1282,33 @@ namespace JoyD.Windows.CS
int height = Math.Abs(currentImagePoint.Y - _rectangleStartPoint.Y);
Rectangle rect = new Rectangle(x, y, width, height);
- // 创建半透明的填充颜色
- Color fillColor = Color.FromArgb(128, selectedColor);
-
- // 绘制填充矩形
- g.FillRectangle(new SolidBrush(fillColor), rect);
-
- // 绘制矩形边框
- using (Pen pen = new Pen(selectedColor, _currentBrushSize))
- {
- g.DrawRectangle(pen, rect);
+ if (_isEraseMode)
+ {
+ // 擦除模式:使用透明色填充整个矩形区域
+ g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
+ g.FillRectangle(Brushes.Transparent, rect);
+ g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
+ }
+ else
+ {
+ // 普通绘制模式:使用半透明填充和边框
+ // 创建半透明的填充颜色
+ Color fillColor = Color.FromArgb(128, selectedColor);
+
+ // 绘制填充矩形
+ g.FillRectangle(new SolidBrush(fillColor), rect);
+
+ // 绘制矩形边框
+ using (Pen pen = new Pen(selectedColor, _currentBrushSize))
+ {
+ g.DrawRectangle(pen, rect);
+ }
}
}
// 将临时位图复制回温差层图像
using (Graphics g = Graphics.FromImage(_tempDiffOverlayImage))
- {
+ {
g.DrawImage(tempBitmap, 0, 0);
}
}
@@ -1251,9 +1316,9 @@ namespace JoyD.Windows.CS
// 触发重绘
picBoxTemp.Invalidate();
}
- // 普通绘制操作(未按住Ctrl键)
+ // 普通绘制/擦除操作(未按住Ctrl键)
else if (e.Button == MouseButtons.Left && !_isDrawingRectangle && picBoxTemp.Image != null)
- {
+ {
// 初始化温差层图像(如果不存在或尺寸不匹配)
if (_tempDiffOverlayImage == null ||
_tempDiffOverlayImage.Width != picBoxTemp.Image.Width ||
@@ -1265,38 +1330,75 @@ namespace JoyD.Windows.CS
// 获取相对于图像的坐标
Point imagePoint = ControlPointToImagePoint(e.Location);
- // 在温差层图像上绘制
+ // 在温差层图像上绘制/擦除
using (Graphics g = Graphics.FromImage(_tempDiffOverlayImage))
- {
+ {
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
- // 使用当前选中的颜色和画笔大小绘制
- using (Pen pen = new Pen(selectedColor, _currentBrushSize))
- {
- pen.StartCap = LineCap.Round;
- pen.EndCap = LineCap.Round;
- pen.LineJoin = LineJoin.Round;
+ if (_isEraseMode)
+ {
+ // 擦除模式:使用透明色填充,设置CompositingMode为清除
+ g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
- // 如果是首次绘制或上一个点无效,记录当前点作为起点
+ // 如果是首次擦除或上一个点无效,记录当前点作为起点
if (_lastDrawPoint == Point.Empty)
- {
+ {
_lastDrawPoint = imagePoint;
- // 绘制起始点的圆形
+ // 绘制起始点的圆形(擦除区域)
int radius = _currentBrushSize / 2;
- g.FillEllipse(new SolidBrush(selectedColor),
+ g.FillEllipse(Brushes.Transparent,
imagePoint.X - radius,
imagePoint.Y - radius,
_currentBrushSize,
_currentBrushSize);
}
else
- {
- // 绘制连线
- g.DrawLine(pen, _lastDrawPoint, imagePoint);
+ {
+ // 使用透明色绘制粗线条进行擦除
+ using (Pen pen = new Pen(Color.Transparent, _currentBrushSize))
+ {
+ pen.StartCap = LineCap.Round;
+ pen.EndCap = LineCap.Round;
+ pen.LineJoin = LineJoin.Round;
+ g.DrawLine(pen, _lastDrawPoint, imagePoint);
+ }
// 更新上一个点
_lastDrawPoint = imagePoint;
}
+
+ // 恢复默认的合成模式
+ g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
+ }
+ else
+ {
+ // 普通绘制模式
+ using (Pen pen = new Pen(selectedColor, _currentBrushSize))
+ {
+ pen.StartCap = LineCap.Round;
+ pen.EndCap = LineCap.Round;
+ pen.LineJoin = LineJoin.Round;
+
+ // 如果是首次绘制或上一个点无效,记录当前点作为起点
+ if (_lastDrawPoint == Point.Empty)
+ {
+ _lastDrawPoint = imagePoint;
+ // 绘制起始点的圆形
+ int radius = _currentBrushSize / 2;
+ g.FillEllipse(new SolidBrush(selectedColor),
+ imagePoint.X - radius,
+ imagePoint.Y - radius,
+ _currentBrushSize,
+ _currentBrushSize);
+ }
+ else
+ {
+ // 绘制连线
+ g.DrawLine(pen, _lastDrawPoint, imagePoint);
+ // 更新上一个点
+ _lastDrawPoint = imagePoint;
+ }
+ }
}
}
@@ -1864,6 +1966,40 @@ namespace JoyD.Windows.CS
{
Console.WriteLine("温差图按钮图标设置失败: " + ex.Message);
}
+
+ // 设置擦除按钮的图标
+ try
+ {
+ Bitmap eraseTempDiffIcon = new Bitmap(24, 24);
+ using (Graphics g = Graphics.FromImage(eraseTempDiffIcon))
+ {
+ // 设置高质量绘图
+ g.SmoothingMode = SmoothingMode.AntiAlias;
+
+ // 清除背景为透明
+ g.Clear(Color.Transparent);
+
+ // 绘制橡皮擦图标 - 一个矩形表示橡皮擦
+ // 绘制橡皮擦主体
+ using (Pen pen = new Pen(Color.Black, 2))
+ {
+ g.DrawRectangle(pen, 6, 8, 12, 10);
+ }
+ // 绘制橡皮擦手柄
+ using (Pen pen = new Pen(Color.Black, 1.5f))
+ {
+ g.DrawLine(pen, 12, 8, 12, 4);
+ g.DrawLine(pen, 10, 4, 14, 4);
+ }
+ }
+
+ btnEraseTempDiff.Image = eraseTempDiffIcon;
+ btnEraseTempDiff.ImageTransparentColor = Color.Transparent;
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("擦除按钮图标设置失败: " + ex.Message);
+ }
// 设置添加温差图例按钮的图标
try