diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs
index 5d46b31..7979512 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs
@@ -828,7 +828,7 @@ namespace JoyD.Windows.CS.Toprie
// 创建图像副本以避免线程安全问题
Image clonedImage = (Image)tempImage.Clone();
// 调用Setting窗口的方法更新实时温度图像
- Setting.Form.RealTimeImage = clonedImage;
+ Setting.Form.UpdateRealTimeImage(clonedImage);
}
if (lastImage != null)
diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/README.md b/Windows/CS/Framework4.0/Toprie/Toprie/README.md
index 1cbeb0d..4db0959 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/README.md
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/README.md
@@ -27,6 +27,7 @@
2. 再将InfoImage绘制到缓冲
3. 在就绪条件下,调用更新实时信息,并将DisplayImage绘制到缓冲
4. 最后一次性绘制到图像框的bitmap
+ 5. 同步更新检测配置窗口的实时图像属性
### 更新实时信息
1. 以透明色清空DisplayImage
diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Resources/DrawRegionIcon.svg b/Windows/CS/Framework4.0/Toprie/Toprie/Resources/DrawRegionIcon.svg
new file mode 100644
index 0000000..8cac0e0
--- /dev/null
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Resources/DrawRegionIcon.svg
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs
index 910d393..6a3253f 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs
@@ -28,47 +28,129 @@
///
private void InitializeComponent()
{
- this.groupBoxRealTimeTemperature = new System.Windows.Forms.GroupBox();
- this.pictureBoxTemperatureDisplay = new System.Windows.Forms.PictureBox();
- this.groupBoxRealTimeTemperature.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBoxTemperatureDisplay)).BeginInit();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Setting));
+ this.splitContainer = new System.Windows.Forms.SplitContainer();
+ this.groupBoxTempDisplay = new System.Windows.Forms.GroupBox();
+ this.picBoxTemp = new System.Windows.Forms.PictureBox();
+ this.toolStripContainer = new System.Windows.Forms.ToolStripContainer();
+ this.toolStrip = new System.Windows.Forms.ToolStrip();
+ this.btnDrawRegion = new System.Windows.Forms.ToolStripButton();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+ this.splitContainer.Panel1.SuspendLayout();
+ this.splitContainer.Panel2.SuspendLayout();
+ this.splitContainer.SuspendLayout();
+ this.groupBoxTempDisplay.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.picBoxTemp)).BeginInit();
+ this.toolStripContainer.ContentPanel.SuspendLayout();
+ this.toolStripContainer.SuspendLayout();
+ this.toolStrip.SuspendLayout();
this.SuspendLayout();
//
- // groupBoxRealTimeTemperature
+ // splitContainer
//
- this.groupBoxRealTimeTemperature.Controls.Add(this.pictureBoxTemperatureDisplay);
- this.groupBoxRealTimeTemperature.Location = new System.Drawing.Point(12, 12);
- this.groupBoxRealTimeTemperature.Name = "groupBoxRealTimeTemperature";
- this.groupBoxRealTimeTemperature.Size = new System.Drawing.Size(353, 337);
- this.groupBoxRealTimeTemperature.TabIndex = 0;
- this.groupBoxRealTimeTemperature.TabStop = false;
- this.groupBoxRealTimeTemperature.Text = "实时温度";
+ this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer.Location = new System.Drawing.Point(0, 0);
+ this.splitContainer.Name = "splitContainer";
//
- // pictureBoxTemperatureDisplay
+ // splitContainer.Panel1
//
- this.pictureBoxTemperatureDisplay.Location = new System.Drawing.Point(6, 24);
- this.pictureBoxTemperatureDisplay.Name = "pictureBoxTemperatureDisplay";
- this.pictureBoxTemperatureDisplay.Size = new System.Drawing.Size(341, 307);
- this.pictureBoxTemperatureDisplay.TabIndex = 0;
- this.pictureBoxTemperatureDisplay.TabStop = false;
+ this.splitContainer.Panel1.Controls.Add(this.groupBoxTempDisplay);
+ //
+ // splitContainer.Panel2
+ //
+ this.splitContainer.Panel2.Controls.Add(this.toolStripContainer);
+ this.splitContainer.Size = new System.Drawing.Size(649, 450);
+ this.splitContainer.SplitterDistance = 471;
+ this.splitContainer.TabIndex = 1;
+ //
+ // groupBoxTempDisplay
+ //
+ this.groupBoxTempDisplay.Controls.Add(this.picBoxTemp);
+ this.groupBoxTempDisplay.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.groupBoxTempDisplay.Location = new System.Drawing.Point(0, 0);
+ this.groupBoxTempDisplay.Name = "groupBoxTempDisplay";
+ this.groupBoxTempDisplay.Size = new System.Drawing.Size(471, 450);
+ this.groupBoxTempDisplay.TabIndex = 1;
+ this.groupBoxTempDisplay.TabStop = false;
+ this.groupBoxTempDisplay.Text = "实时温度";
+ //
+ // picBoxTemp
+ //
+ this.picBoxTemp.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.picBoxTemp.Location = new System.Drawing.Point(3, 21);
+ this.picBoxTemp.Name = "picBoxTemp";
+ this.picBoxTemp.Size = new System.Drawing.Size(465, 426);
+ this.picBoxTemp.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+ this.picBoxTemp.TabIndex = 0;
+ this.picBoxTemp.TabStop = false;
+ //
+ // toolStripContainer
+ //
+ //
+ // toolStripContainer.ContentPanel
+ //
+ this.toolStripContainer.ContentPanel.Controls.Add(this.toolStrip);
+ this.toolStripContainer.ContentPanel.Size = new System.Drawing.Size(174, 425);
+ this.toolStripContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.toolStripContainer.Location = new System.Drawing.Point(0, 0);
+ this.toolStripContainer.Name = "toolStripContainer";
+ this.toolStripContainer.Size = new System.Drawing.Size(174, 450);
+ this.toolStripContainer.TabIndex = 0;
+ this.toolStripContainer.Text = "toolStripContainer";
+ //
+ // toolStrip
+ //
+ this.toolStrip.Dock = System.Windows.Forms.DockStyle.None;
+ this.toolStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
+ this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.btnDrawRegion});
+ this.toolStrip.Location = new System.Drawing.Point(0, 0);
+ this.toolStrip.Name = "toolStrip";
+ this.toolStrip.Size = new System.Drawing.Size(75, 27);
+ this.toolStrip.TabIndex = 1;
+ this.toolStrip.Text = "toolStrip";
+ //
+ // btnDrawRegion
+ //
+ this.btnDrawRegion.CheckOnClick = true;
+ this.btnDrawRegion.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.btnDrawRegion.ImageTransparentColor = System.Drawing.Color.Transparent;
+ this.btnDrawRegion.Name = "btnDrawRegion";
+ this.btnDrawRegion.Size = new System.Drawing.Size(24, 24);
+ this.btnDrawRegion.Text = "画框";
+ this.btnDrawRegion.ToolTipText = "绘制温度检测区域(点击开启/关闭)";
//
// Setting
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(1191, 450);
- this.Controls.Add(this.groupBoxRealTimeTemperature);
+ this.ClientSize = new System.Drawing.Size(649, 450);
+ this.Controls.Add(this.splitContainer);
this.Name = "Setting";
this.Text = "检测配置";
- this.groupBoxRealTimeTemperature.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.pictureBoxTemperatureDisplay)).EndInit();
+ this.splitContainer.Panel1.ResumeLayout(false);
+ this.splitContainer.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+ this.splitContainer.ResumeLayout(false);
+ this.groupBoxTempDisplay.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.picBoxTemp)).EndInit();
+ this.toolStripContainer.ContentPanel.ResumeLayout(false);
+ this.toolStripContainer.ContentPanel.PerformLayout();
+ this.toolStripContainer.ResumeLayout(false);
+ this.toolStripContainer.PerformLayout();
+ this.toolStrip.ResumeLayout(false);
+ this.toolStrip.PerformLayout();
this.ResumeLayout(false);
}
#endregion
- private System.Windows.Forms.GroupBox groupBoxRealTimeTemperature;
- private System.Windows.Forms.PictureBox pictureBoxTemperatureDisplay;
+ private System.Windows.Forms.SplitContainer splitContainer;
+ private System.Windows.Forms.GroupBox groupBoxTempDisplay;
+ private System.Windows.Forms.PictureBox picBoxTemp;
+ private System.Windows.Forms.ToolStripContainer toolStripContainer;
+ private System.Windows.Forms.ToolStrip toolStrip;
+ private System.Windows.Forms.ToolStripButton btnDrawRegion;
}
}
\ 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 3d243c4..f7ae5be 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs
@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
@@ -17,10 +19,22 @@ namespace JoyD.Windows.CS
// 定时器字段
private Timer _timer;
+ // 绘制模式标志
+ private bool _isDrawingMode = false;
+
+ // 矩形绘制相关变量
+ private Point _startPoint;
+ private Rectangle _currentRectangle = Rectangle.Empty;
+ private bool _isDrawing = false;
+ private List _drawnRectangles = new List();
+
public Setting()
{
InitializeComponent();
+ // 设置按钮图标
+ SetButtonIcon();
+
// 初始化定时器
_timer = new Timer { Interval = 1000 };
_timer.Tick += Timer_Tick;
@@ -28,6 +42,170 @@ namespace JoyD.Windows.CS
// 注册窗口事件
this.Shown += Setting_Shown;
this.FormClosing += Setting_FormClosing;
+
+ // 注册按钮点击事件
+ btnDrawRegion.Click += BtnDrawRegion_Click;
+ }
+
+ ///
+ /// 绘制区域按钮点击事件
+ ///
+ private void BtnDrawRegion_Click(object sender, EventArgs e)
+ {
+ _isDrawingMode = btnDrawRegion.Checked;
+
+ if (_isDrawingMode)
+ {
+ // 启用绘制模式
+ picBoxTemp.MouseDown += PicBoxTemp_MouseDown;
+ picBoxTemp.MouseMove += PicBoxTemp_MouseMove;
+ picBoxTemp.MouseUp += PicBoxTemp_MouseUp;
+ picBoxTemp.Cursor = Cursors.Cross;
+ btnDrawRegion.ToolTipText = "绘制模式已启用,点击图片区域绘制矩形框(点击关闭)";
+ }
+ else
+ {
+ // 禁用绘制模式
+ picBoxTemp.MouseDown -= PicBoxTemp_MouseDown;
+ picBoxTemp.MouseMove -= PicBoxTemp_MouseMove;
+ picBoxTemp.MouseUp -= PicBoxTemp_MouseUp;
+ picBoxTemp.Cursor = Cursors.Default;
+ _currentRectangle = Rectangle.Empty;
+ btnDrawRegion.ToolTipText = "绘制温度检测区域(点击开启/关闭)";
+ // 重绘以清除临时矩形
+ picBoxTemp.Invalidate();
+ }
+ }
+
+ ///
+ /// 鼠标按下事件 - 开始绘制矩形
+ ///
+ private void PicBoxTemp_MouseDown(object sender, MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Left && _isDrawingMode)
+ {
+ _startPoint = e.Location;
+ _isDrawing = true;
+ _currentRectangle = new Rectangle(e.X, e.Y, 0, 0);
+ }
+ }
+
+ ///
+ /// 鼠标移动事件 - 更新矩形大小
+ ///
+ private void PicBoxTemp_MouseMove(object sender, MouseEventArgs e)
+ {
+ if (_isDrawing && _isDrawingMode)
+ {
+ int width = e.X - _startPoint.X;
+ int height = e.Y - _startPoint.Y;
+
+ _currentRectangle = new Rectangle(
+ width > 0 ? _startPoint.X : _startPoint.X + width,
+ height > 0 ? _startPoint.Y : _startPoint.Y + height,
+ Math.Abs(width),
+ Math.Abs(height));
+
+ picBoxTemp.Invalidate();
+ }
+ }
+
+ ///
+ /// 鼠标释放事件 - 完成矩形绘制
+ ///
+ private void PicBoxTemp_MouseUp(object sender, MouseEventArgs e)
+ {
+ if (_isDrawing && _isDrawingMode && e.Button == MouseButtons.Left)
+ {
+ _isDrawing = false;
+
+ // 确保矩形有一定大小才添加
+ if (_currentRectangle.Width > 10 && _currentRectangle.Height > 10)
+ {
+ _drawnRectangles.Add(_currentRectangle);
+ // 可以在这里添加处理矩形区域的逻辑,如保存区域信息等
+
+ // 显示绘制完成的提示
+ ToolStripStatusLabel statusLabel = new ToolStripStatusLabel();
+ statusLabel.Text = string.Format("已添加检测区域: X={0}, Y={1}, 宽={2}, 高={3}",
+ _currentRectangle.X, _currentRectangle.Y, _currentRectangle.Width, _currentRectangle.Height);
+ // 如果有状态栏,可以添加到状态栏显示
+ }
+
+ _currentRectangle = Rectangle.Empty;
+ picBoxTemp.Invalidate();
+ }
+ }
+
+ ///
+ /// 绘制事件 - 显示矩形框
+ ///
+ private void PicBoxTemp_Paint(object sender, PaintEventArgs e)
+ {
+ // 绘制所有已完成的矩形
+ foreach (Rectangle rect in _drawnRectangles)
+ {
+ e.Graphics.DrawRectangle(new Pen(Color.Red, 2), rect);
+ }
+
+ // 绘制当前正在绘制的矩形
+ if (!_currentRectangle.IsEmpty)
+ {
+ using (Pen dashedPen = new Pen(Color.Blue, 2))
+ {
+ dashedPen.DashPattern = new float[] { 5, 2 };
+ e.Graphics.DrawRectangle(dashedPen, _currentRectangle);
+ }
+ }
+ }
+
+ ///
+ /// 设置绘制区域按钮的图标
+ ///
+ private void SetButtonIcon()
+ {
+ // 创建一个表示绘制区域的图标
+ Bitmap icon = new Bitmap(24, 24);
+ using (Graphics g = Graphics.FromImage(icon))
+ {
+ // 设置高质量绘图
+ g.SmoothingMode = SmoothingMode.AntiAlias;
+ g.InterpolationMode = InterpolationMode.HighQualityBicubic;
+
+ // 清除背景为透明
+ g.Clear(Color.Transparent);
+
+ // 绘制外矩形
+ g.DrawRectangle(new Pen(Color.Black, 2), 3, 3, 18, 18);
+
+ // 绘制虚线内矩形
+ using (Pen dashedPen = new Pen(Color.Black, 1.5f))
+ {
+ dashedPen.DashPattern = new float[] { 2, 1 };
+ g.DrawRectangle(dashedPen, 5, 5, 14, 14);
+ }
+
+ // 绘制四个角的控制点
+ SolidBrush brush = new SolidBrush(Color.Black);
+ g.FillEllipse(brush, 6, 6, 3, 3); // 左上角
+ g.FillEllipse(brush, 15, 6, 3, 3); // 右上角
+ g.FillEllipse(brush, 6, 15, 3, 3); // 左下角
+ g.FillEllipse(brush, 15, 15, 3, 3); // 右下角
+ }
+
+ // 设置按钮图标并设置透明色
+ btnDrawRegion.Image = icon;
+ btnDrawRegion.ImageTransparentColor = Color.Transparent;
+
+ // 启用双缓冲以减少闪烁
+ typeof(PictureBox).InvokeMember("DoubleBuffered",
+ System.Reflection.BindingFlags.SetProperty |
+ System.Reflection.BindingFlags.Instance |
+ System.Reflection.BindingFlags.NonPublic,
+ null, picBoxTemp, new object[] { true });
+
+ // 注册Paint事件
+ picBoxTemp.Paint += PicBoxTemp_Paint;
}
///
@@ -51,7 +229,6 @@ namespace JoyD.Windows.CS
private void Setting_FormClosing(object sender, FormClosingEventArgs e)
{
_timer.Stop();
- mRealTimeImage?.Dispose();
}
///
@@ -83,109 +260,117 @@ namespace JoyD.Windows.CS
///
/// 更新PictureBox图像的辅助方法
+ /// 此方法必须在UI线程上执行
///
private void UpdatePictureBoxImage()
{
- // 安全更新图像
- if (pictureBoxTemperatureDisplay != null && !pictureBoxTemperatureDisplay.IsDisposed)
+ }
+
+ ///
+ /// 更新pictureBoxTemperatureDisplay的图像
+ /// 此方法可以从任何线程调用
+ ///
+ /// 要显示的新图像
+ public void UpdateRealTimeImage(Image NewImage)
+ {
+ // 空值检查
+ if (NewImage == null)
{
- try
+ Console.WriteLine("传入UpdateRealTimeImage的图像为空");
+ return;
+ }
+
+ // 检查是否处于设计模式或窗口不可见
+ if (DesignMode || !this.Visible || this.IsDisposed || this.Disposing)
+ {
+ // 如果不满足条件,释放图像资源并返回
+ NewImage.Dispose();
+ return;
+ }
+
+ try
+ {
+ // 线程安全检查 - 确保在UI线程上执行
+ if (this.InvokeRequired)
{
- // 保存旧图像引用,以便设置新图像后释放
- Image oldImage = pictureBoxTemperatureDisplay.Image;
-
- // 检查mRealTimeImage是否有效 - 只设置有效的图像
- Image imageToSet = null;
try
{
- // 验证图像是否有效(尝试访问图像属性,如果无效会抛出异常)
- if (mRealTimeImage != null)
+ // 使用BeginInvoke在UI线程上更新图像
+ this.BeginInvoke(new Action(() =>
{
- // 尝试访问Width属性来验证图像是否有效
- var width = mRealTimeImage.Width;
- // 如果没有抛出异常,则图像有效
- imageToSet = mRealTimeImage;
- }
+ try
+ {
+ // 确保窗口未被释放
+ if (!this.IsDisposed && !this.Disposing && picBoxTemp != null && !picBoxTemp.IsDisposed)
+ {
+ // 保存旧图像引用,以便在设置新图像后释放
+ Image oldImage = picBoxTemp.Image;
+
+ // 设置新图像
+ picBoxTemp.Image = NewImage;
+
+ // 释放旧图像资源
+ if (oldImage != null && oldImage != NewImage)
+ {
+ oldImage.Dispose();
+ }
+ }
+ else
+ {
+ // 如果控件已释放,确保释放图像资源
+ NewImage.Dispose();
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"更新设置窗口图像失败: {ex.Message}");
+ // 确保在异常情况下释放图像资源
+ try
+ {
+ NewImage.Dispose();
+ }
+ catch {}
+ }
+ }));
}
- catch (Exception)
+ catch (ObjectDisposedException)
{
- // 图像无效,不设置它
- // 可以选择记录日志或创建一个默认的错误图像
+ // 控件已释放,忽略并释放图像资源
+ NewImage.Dispose();
}
-
- // 再次检查控件是否仍然有效,防止在验证过程中控件被释放
- if (pictureBoxTemperatureDisplay != null && !pictureBoxTemperatureDisplay.IsDisposed)
- {
- // 设置图像(如果有效)
- try
- {
- pictureBoxTemperatureDisplay.Image = imageToSet;
- }
- catch (Exception ex)
- {
- // 捕获设置图像时可能发生的异常
- System.Diagnostics.Debug.WriteLine($"设置PictureBox图像失败: {ex.Message}");
- // 确保设置为null而不是无效图像
- pictureBoxTemperatureDisplay.Image = null;
- }
- }
-
- // 释放旧图像(如果不是当前设置的图像)
- if (oldImage != null && oldImage != imageToSet)
- {
- try { oldImage.Dispose(); } catch { }
- }
- }
- catch (Exception ex)
- {
- // 捕获所有其他异常,确保方法不会崩溃
- System.Diagnostics.Debug.WriteLine($"UpdatePictureBoxImage异常: {ex.Message}");
- }
- }
- }
- private Image mRealTimeImage = null;
- ///
- /// 实时图像属性
- /// 作为后台变量,移除线程安全检查以提高性能
- /// 注意:调用方需确保在合适的线程上下文中访问
- ///
- public Image RealTimeImage
- {
- get
- {
- return mRealTimeImage;
- }
- set
- {
- // 防止重复设置相同的图像
- if (mRealTimeImage == value)
- return;
-
- // 检查是否在有效状态下操作
- if (this.IsDisposed || this.Disposing)
- {
- // 如果窗口已关闭或正在关闭,释放传入的图像
- value?.Dispose();
return;
}
- // 释放旧图像资源
- if (mRealTimeImage != null && mRealTimeImage != value)
+ // 在UI线程上直接更新图像
+ if (!this.IsDisposed && !this.Disposing && picBoxTemp != null && !picBoxTemp.IsDisposed)
{
- try
- {
- mRealTimeImage.Dispose();
- }
- catch (Exception ex)
- {
- // 记录异常但不中断流程
- System.Diagnostics.Debug.WriteLine($"释放旧图像资源失败: {ex.Message}");
- }
+ // 保存旧图像引用,以便在设置新图像后释放
+ Image oldImage = picBoxTemp.Image;
+
+ // 设置新图像
+ picBoxTemp.Image = NewImage;
+
+ // 释放旧图像资源
+ if (oldImage != null && oldImage != NewImage)
+ {
+ oldImage.Dispose();
+ }
}
-
- // 只设置mRealTimeImage,不直接更新UI
- // UI更新将由定时器的Timer_Tick事件处理
- mRealTimeImage = value;
+ else
+ {
+ // 如果控件已释放,确保释放图像资源
+ NewImage.Dispose();
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"处理实时图像更新时出错: {ex.Message}");
+ // 确保在任何异常情况下都释放图像资源
+ try
+ {
+ NewImage.Dispose();
+ }
+ catch {}
}
}
}
diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.resx b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.resx
index 1af7de1..68d6127 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.resx
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.resx
@@ -117,4 +117,23 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 17, 17
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK
+ YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X
+ /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t
+ I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM
+ cX79DFKrHHD5d9D26hvicx4pABt2lpg10zYzU0zr7+e3xXGcrkEB2O2TNec9nJFwB3alZn5jZorfeDZh
+ 6Q3g8s06BeCoKF4MRURoH1+BY2oNCbeb0TIclIYxOhzf8frTOuo7FxCbbVIAzpni0iceEc8vhzEwGkJD
+ lx83ymxifejdKjRNk/8PWnyIyTQqAJek0jqHwfEVscu31baIu8+90sTE4nY025dQ2/5FIPpnXlzKuK8A
+ HBUzHot52djqQ6HZhfR7IwK4mKpHtvEDMqvfCiQ6zaAAXM8x94aIWTNrLLG4kVUzgaTSPlzLtyJOZxbb
+ 1wtfyg4Q+AfA3aZlButjSfxGcUJBk4g5tuP3haQKRKXcUQDOmbvNTpPOJeFFjordZmbWTNvMTHFUcpUC
+ nOccAdABIDXXE1nzAAAAAElFTkSuQmCC
+
+
\ No newline at end of file
diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Toprie.csproj b/Windows/CS/Framework4.0/Toprie/Toprie/Toprie.csproj
index b1c780d..800fcf0 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/Toprie.csproj
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Toprie.csproj
@@ -72,6 +72,11 @@
+
+ True
+ True
+ Resources.resx
+
Form
@@ -88,6 +93,10 @@
Camera.cs
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
Setting.cs
@@ -95,5 +104,8 @@
+
+
+
\ No newline at end of file