增加循环检测按钮

This commit is contained in:
uu
2025-06-12 15:03:32 +08:00
parent 86a10f3cc7
commit 011a93a777
240 changed files with 298278 additions and 25 deletions

View File

@@ -77,11 +77,21 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>bin\x64\Release\ClassLibrary_ControlBean.dll</HintPath> <HintPath>bin\x64\Release\ClassLibrary_ControlBean.dll</HintPath>
</Reference> </Reference>
<Reference Include="EPPlus, Version=5.0.3.0, Culture=neutral, PublicKeyToken=ea159fdaa78159a1, processorArchitecture=MSIL">
<HintPath>..\packages\EPPlus.5.0.3\lib\net45\EPPlus.dll</HintPath>
</Reference>
<Reference Include="MvCameraControl.Net"> <Reference Include="MvCameraControl.Net">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\MVS\Development\DotNet\AnyCpu\MvCameraControl.Net.dll</HintPath> <HintPath>..\..\..\..\..\..\..\Program Files (x86)\MVS\Development\DotNet\AnyCpu\MvCameraControl.Net.dll</HintPath>
</Reference> </Reference>
<Reference Include="OfficeOpenXml.Extension.AspNetCore, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\OfficeOpenXml.Extension.AspNetCore.1.0.0\lib\netstandard2.0\OfficeOpenXml.Extension.AspNetCore.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.configuration" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Security" />
<Reference Include="System.Threading.Tasks" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
@@ -115,6 +125,7 @@
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
</Compile> </Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>

View File

@@ -103,6 +103,12 @@
this.btn_Pause = new System.Windows.Forms.Button(); this.btn_Pause = new System.Windows.Forms.Button();
this.btn_Start = new System.Windows.Forms.Button(); this.btn_Start = new System.Windows.Forms.Button();
this.tap_Cam = new System.Windows.Forms.TabPage(); this.tap_Cam = new System.Windows.Forms.TabPage();
this.textBox1 = new System.Windows.Forms.TextBox();
this.checkBox4 = new System.Windows.Forms.CheckBox();
this.checkBox3 = new System.Windows.Forms.CheckBox();
this.checkBox2 = new System.Windows.Forms.CheckBox();
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.button2 = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.button1 = new System.Windows.Forms.Button(); this.button1 = new System.Windows.Forms.Button();
this.cam_feed = new System.Windows.Forms.PictureBox(); this.cam_feed = new System.Windows.Forms.PictureBox();
@@ -117,6 +123,7 @@
this.lbl_Refresh_ID = new System.Windows.Forms.Label(); this.lbl_Refresh_ID = new System.Windows.Forms.Label();
this.tim_IO_Refresh = new System.Windows.Forms.Timer(this.components); this.tim_IO_Refresh = new System.Windows.Forms.Timer(this.components);
this.rit_Coord = new System.Windows.Forms.RichTextBox(); this.rit_Coord = new System.Windows.Forms.RichTextBox();
this.label1 = new System.Windows.Forms.Label();
this.tac_MainForm.SuspendLayout(); this.tac_MainForm.SuspendLayout();
this.tap_Axis.SuspendLayout(); this.tap_Axis.SuspendLayout();
this.grb_R.SuspendLayout(); this.grb_R.SuspendLayout();
@@ -995,6 +1002,13 @@
// //
// tap_Cam // tap_Cam
// //
this.tap_Cam.Controls.Add(this.label1);
this.tap_Cam.Controls.Add(this.textBox1);
this.tap_Cam.Controls.Add(this.checkBox4);
this.tap_Cam.Controls.Add(this.checkBox3);
this.tap_Cam.Controls.Add(this.checkBox2);
this.tap_Cam.Controls.Add(this.checkBox1);
this.tap_Cam.Controls.Add(this.button2);
this.tap_Cam.Controls.Add(this.pictureBox1); this.tap_Cam.Controls.Add(this.pictureBox1);
this.tap_Cam.Controls.Add(this.button1); this.tap_Cam.Controls.Add(this.button1);
this.tap_Cam.Controls.Add(this.cam_feed); this.tap_Cam.Controls.Add(this.cam_feed);
@@ -1013,22 +1027,84 @@
this.tap_Cam.UseVisualStyleBackColor = true; this.tap_Cam.UseVisualStyleBackColor = true;
this.tap_Cam.Click += new System.EventHandler(this.tap_Cam_Click); this.tap_Cam.Click += new System.EventHandler(this.tap_Cam_Click);
// //
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(1026, 72);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(100, 28);
this.textBox1.TabIndex = 16;
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
//
// checkBox4
//
this.checkBox4.AutoSize = true;
this.checkBox4.Location = new System.Drawing.Point(807, 76);
this.checkBox4.Name = "checkBox4";
this.checkBox4.Size = new System.Drawing.Size(79, 22);
this.checkBox4.TabIndex = 15;
this.checkBox4.Text = "点位4";
this.checkBox4.UseVisualStyleBackColor = true;
this.checkBox4.CheckedChanged += new System.EventHandler(this.checkBox4_CheckedChanged);
//
// checkBox3
//
this.checkBox3.AutoSize = true;
this.checkBox3.Location = new System.Drawing.Point(676, 77);
this.checkBox3.Name = "checkBox3";
this.checkBox3.Size = new System.Drawing.Size(79, 22);
this.checkBox3.TabIndex = 14;
this.checkBox3.Text = "点位3";
this.checkBox3.UseVisualStyleBackColor = true;
this.checkBox3.CheckedChanged += new System.EventHandler(this.checkBox3_CheckedChanged);
//
// checkBox2
//
this.checkBox2.AutoSize = true;
this.checkBox2.Location = new System.Drawing.Point(544, 78);
this.checkBox2.Name = "checkBox2";
this.checkBox2.Size = new System.Drawing.Size(79, 22);
this.checkBox2.TabIndex = 13;
this.checkBox2.Text = "点位2";
this.checkBox2.UseVisualStyleBackColor = true;
this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged);
//
// checkBox1
//
this.checkBox1.AutoSize = true;
this.checkBox1.Location = new System.Drawing.Point(422, 79);
this.checkBox1.Name = "checkBox1";
this.checkBox1.Size = new System.Drawing.Size(79, 22);
this.checkBox1.TabIndex = 12;
this.checkBox1.Text = "点位1";
this.checkBox1.UseVisualStyleBackColor = true;
this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged_1);
//
// button2
//
this.button2.Location = new System.Drawing.Point(980, 492);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(150, 43);
this.button2.TabIndex = 11;
this.button2.Text = "开始循环检测";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click_2);
//
// pictureBox1 // pictureBox1
// //
this.pictureBox1.Location = new System.Drawing.Point(797, 143); this.pictureBox1.Location = new System.Drawing.Point(797, 156);
this.pictureBox1.Name = "pictureBox1"; this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(333, 300); this.pictureBox1.Size = new System.Drawing.Size(333, 276);
this.pictureBox1.TabIndex = 10; this.pictureBox1.TabIndex = 10;
this.pictureBox1.TabStop = false; this.pictureBox1.TabStop = false;
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click); this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
// //
// button1 // button1
// //
this.button1.Location = new System.Drawing.Point(892, 492); this.button1.Location = new System.Drawing.Point(797, 492);
this.button1.Name = "button1"; this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(161, 43); this.button1.Size = new System.Drawing.Size(145, 43);
this.button1.TabIndex = 9; this.button1.TabIndex = 9;
this.button1.Text = "开始目标检测"; this.button1.Text = "检测";
this.button1.UseVisualStyleBackColor = true; this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click_2); this.button1.Click += new System.EventHandler(this.button1_Click_2);
// //
@@ -1147,6 +1223,15 @@
this.rit_Coord.Text = ""; this.rit_Coord.Text = "";
this.rit_Coord.TextChanged += new System.EventHandler(this.rit_Coord_TextChanged); this.rit_Coord.TextChanged += new System.EventHandler(this.rit_Coord_TextChanged);
// //
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(932, 78);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(98, 18);
this.label1.TabIndex = 17;
this.label1.Text = "停留时间:";
//
// ShowForm // ShowForm
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
@@ -1186,6 +1271,7 @@
this.tap_Move.ResumeLayout(false); this.tap_Move.ResumeLayout(false);
this.tap_Move.PerformLayout(); this.tap_Move.PerformLayout();
this.tap_Cam.ResumeLayout(false); this.tap_Cam.ResumeLayout(false);
this.tap_Cam.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.cam_feed)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.cam_feed)).EndInit();
this.panel1.ResumeLayout(false); this.panel1.ResumeLayout(false);
@@ -1283,6 +1369,13 @@
private System.Windows.Forms.PictureBox cam_feed; private System.Windows.Forms.PictureBox cam_feed;
private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button1;
private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.CheckBox checkBox4;
private System.Windows.Forms.CheckBox checkBox3;
private System.Windows.Forms.CheckBox checkBox2;
private System.Windows.Forms.CheckBox checkBox1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Label label1;
} }
} }

View File

@@ -10,6 +10,8 @@ using System.Windows.Forms;
using TcpserverExDll; using TcpserverExDll;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Data;
using OfficeOpenXml;
namespace HitBotCSharpDemo namespace HitBotCSharpDemo
{ {
@@ -43,6 +45,7 @@ namespace HitBotCSharpDemo
private float[][] cameraPositions; private float[][] cameraPositions;
private string filePath = "Cam_pos_path.txt"; private string filePath = "Cam_pos_path.txt";
private string configFilePath = "Camera_config.txt"; private string configFilePath = "Camera_config.txt";
readonly DeviceTLayerType enumTLayerType = DeviceTLayerType.MvGigEDevice | DeviceTLayerType.MvUsbDevice readonly DeviceTLayerType enumTLayerType = DeviceTLayerType.MvGigEDevice | DeviceTLayerType.MvUsbDevice
| DeviceTLayerType.MvGenTLGigEDevice | DeviceTLayerType.MvGenTLCXPDevice | DeviceTLayerType.MvGenTLCameraLinkDevice | DeviceTLayerType.MvGenTLXoFDevice; | DeviceTLayerType.MvGenTLGigEDevice | DeviceTLayerType.MvGenTLCXPDevice | DeviceTLayerType.MvGenTLCameraLinkDevice | DeviceTLayerType.MvGenTLXoFDevice;
List<IDeviceInfo> deviceInfoList = new List<IDeviceInfo>(); List<IDeviceInfo> deviceInfoList = new List<IDeviceInfo>();
@@ -53,6 +56,7 @@ namespace HitBotCSharpDemo
private readonly object saveImageLock = new object(); private readonly object saveImageLock = new object();
private float currentExposure = 10000f; // 默认曝光时间 private float currentExposure = 10000f; // 默认曝光时间
private float currentGain = 0f; // 默认增益 private float currentGain = 0f; // 默认增益
private TcpClient tcpClient; private TcpClient tcpClient;
private NetworkStream networkStream; private NetworkStream networkStream;
private Thread detectionThread; private Thread detectionThread;
@@ -62,6 +66,12 @@ namespace HitBotCSharpDemo
private float receivedWidth = 0; private float receivedWidth = 0;
private float receivedHeight = 0; private float receivedHeight = 0;
private bool isCycleRunning = false;
private Thread cycleThread;
private string xlsFilePath = Path.Combine(Application.StartupPath, "DetectionResults.xlsx");
private List<float[]> detectionData = new List<float[]>(); // 存储每轮检测数据
private int currentCycle = 0;
private ControlBeanEx robot; private ControlBeanEx robot;
public ShowForm() public ShowForm()
{ {
@@ -340,6 +350,11 @@ namespace HitBotCSharpDemo
} }
protected override void OnFormClosing(FormClosingEventArgs e) protected override void OnFormClosing(FormClosingEventArgs e)
{ {
// 停止循环检测
if (isCycleRunning)
{
StopCycle();
}
// 停止采集 // 停止采集
if (isGrabbing) if (isGrabbing)
{ {
@@ -367,11 +382,12 @@ namespace HitBotCSharpDemo
} }
} }
StopDetection(); StopDetection();
// 终结SDK // 终结SDK
SDKSystem.Finalize(); SDKSystem.Finalize();
base.OnFormClosing(e); base.OnFormClosing(e);
} }
private void LoadCameraPositions() private void LoadCameraPositions()
{ {
try try
@@ -1048,12 +1064,14 @@ namespace HitBotCSharpDemo
// 等待1分钟 // 等待1分钟
Thread.Sleep(60000); Thread.Sleep(60000);
//File.Delete(imagePath);
} }
catch (Exception ex) catch (Exception ex)
{ {
this.Invoke(new Action(() => MessageBox.Show("检测过程出错: " + ex.Message))); this.Invoke(new Action(() => MessageBox.Show("检测过程出错: " + ex.Message)));
break; break;
} }
} }
} }
// 保存当前图像 // 保存当前图像
@@ -1064,13 +1082,7 @@ namespace HitBotCSharpDemo
try try
{ {
string fileName = "temp_detection_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"; string fileName = "temp_detection_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
string detectionFolder = Path.Combine(Application.StartupPath, "OriginalImages"); string fullPath = Path.Combine(Application.StartupPath, fileName);
string fullPath = Path.Combine(detectionFolder, fileName);
if (!Directory.Exists(detectionFolder))
{
Directory.CreateDirectory(detectionFolder);
}
ImageFormatInfo imageFormatInfo = new ImageFormatInfo(); ImageFormatInfo imageFormatInfo = new ImageFormatInfo();
imageFormatInfo.FormatType = ImageFormatType.Jpeg; imageFormatInfo.FormatType = ImageFormatType.Jpeg;
@@ -1150,7 +1162,7 @@ namespace HitBotCSharpDemo
Array.Reverse(heightBuffer); Array.Reverse(heightBuffer);
receivedHeight = BitConverter.ToSingle(heightBuffer, 0); receivedHeight = BitConverter.ToSingle(heightBuffer, 0);
MessageBox.Show($"width:{receivedWidth}, height:{receivedHeight}"); //MessageBox.Show($"width:{receivedWidth}, height:{receivedHeight}");
// 接收图像数据 // 接收图像数据
byte[] imageBuffer = new byte[imageSize]; byte[] imageBuffer = new byte[imageSize];
@@ -1158,8 +1170,7 @@ namespace HitBotCSharpDemo
if (bytesRead != imageSize) throw new Exception("接收图像数据不完整"); if (bytesRead != imageSize) throw new Exception("接收图像数据不完整");
// 保存接收到的图像 // 保存接收到的图像
string startImagePath = Path.Combine(Application.StartupPath, "ReceiveImages"); string receivedImagePath = Path.Combine(Application.StartupPath,
string receivedImagePath = Path.Combine(startImagePath,
"received_detection_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"); "received_detection_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg");
File.WriteAllBytes(receivedImagePath, imageBuffer); File.WriteAllBytes(receivedImagePath, imageBuffer);
@@ -1241,5 +1252,293 @@ namespace HitBotCSharpDemo
{ {
} }
private void button2_Click_2(object sender, EventArgs e)
{
if (!isCycleRunning)
{
// 开始循环
if (!isInit)
{
MessageBox.Show("机械臂未初始化");
return;
}
if (cameraPositions == null || cameraPositions.Length < 5)
{
MessageBox.Show("点位数据未正确加载");
return;
}
// 连接到检测服务器
if (!ConnectToServer())
{
MessageBox.Show("连接检测服务器失败");
return;
}
isCycleRunning = true;
cycleThread = new Thread(CycleProcess);
cycleThread.IsBackground = true;
cycleThread.Start();
((Button)sender).Text = "停止循环";
MessageBox.Show("循环检测已开始");
}
else
{
// 停止循环
StopCycle();
((Button)sender).Text = "开始循环";
MessageBox.Show("循环检测已停止");
}
}
private void CycleProcess()
{
try
{
while (isCycleRunning)
{
float[] cycleResults = new float[8]; // 存储一轮循环的4个点位检测结果
// 按照1-2-3-4的顺序移动
for (int i = 0; i < 4; i++)
{
if (!isCycleRunning) break;
// 移动到指定点位
this.Invoke(new Action(() => {
MoveToPosition(i);
}));
// 等待移动完成
WaitForRobotStopAndDelay(3000);
if (!isCycleRunning)
{
WaitForRobotStop();
break;
}
// 拍照并进行检测
string detectionResult = CaptureAndDetect(i);
if (!string.IsNullOrEmpty(detectionResult))
{
// 在UI线程中显示检测结果
this.Invoke(new Action(() => DisplayDetectionResult(detectionResult)));
// 存储检测到的width和height数据
cycleResults[2 * i] = receivedWidth;
cycleResults[2 * i + 1] = receivedHeight;
}
// 在当前点位停留1分钟
if (isCycleRunning)
{
Thread.Sleep(57000); // 已停留3s
}
}
// 保存本轮循环的数据
if (isCycleRunning)
{
detectionData.Add(cycleResults);
currentCycle++;
// 更新Excel文件
this.Invoke(new Action(() => UpdateExcelFile()));
}
}
}
catch (Exception ex)
{
this.Invoke(new Action(() => MessageBox.Show("循环过程出错: " + ex.Message)));
}
finally
{
// 移动到归位点位第5个点位
if (isInit)
{
WaitForRobotStop();
this.Invoke(new Action(() => {
MoveToPosition(4); // 第5个点位索引4
}));
}
}
}
private void WaitForRobotStop()
{
if (!isInit) return;
while (true)
{
robot.get_scara_param();
if (!robot.move_flag) // 机械臂处于静止状态
{
break;
}
Thread.Sleep(100); // 每100ms检查一次
}
}
private void WaitForRobotStopAndDelay(int additionalDelayMs)
{
// 先等待机械臂停止运动
WaitForRobotStop();
// 然后额外等待指定时间
if (isCycleRunning)
{
Thread.Sleep(additionalDelayMs);
}
}
private string CaptureAndDetect(int positionIndex)
{
try
{
// 重置检测结果
receivedWidth = 0;
receivedHeight = 0;
// 保存当前图像到对应文件夹
string imagePath = SaveImageToPositionFolder(positionIndex);
if (string.IsNullOrEmpty(imagePath))
{
return null;
}
// 发送图像到服务器进行检测
SendImageToServer(imagePath);
// 接收处理后的图像
string receivedImagePath = ReceiveImageFromServer();
// 将检测结果图像保存到对应文件夹
if (!string.IsNullOrEmpty(receivedImagePath))
{
string targetFolder = Path.Combine(Application.StartupPath, $"Position{positionIndex + 1}_Results");
if (!Directory.Exists(targetFolder))
{
Directory.CreateDirectory(targetFolder);
}
string finalPath = Path.Combine(targetFolder,
$"Detection_Pos{positionIndex + 1}_Cycle{currentCycle + 1}_{DateTime.Now:yyyyMMddHHmmss}.jpg");
File.Copy(receivedImagePath, finalPath, true);
//File.Delete(receivedImagePath);
return finalPath;
}
return receivedImagePath;
}
catch (Exception ex)
{
this.Invoke(new Action(() => MessageBox.Show($"点位{positionIndex + 1}检测失败: " + ex.Message)));
return null;
}
}
private string SaveImageToPositionFolder(int positionIndex)
{
if (frameForSave == null) return null;
try
{
string positionFolder = Path.Combine(Application.StartupPath, $"Position{positionIndex + 1}_Original");
if (!Directory.Exists(positionFolder))
{
Directory.CreateDirectory(positionFolder);
}
string fileName = $"Original_Pos{positionIndex + 1}_Cycle{currentCycle + 1}_{DateTime.Now:yyyyMMddHHmmss}.jpg";
string fullPath = Path.Combine(positionFolder, fileName);
ImageFormatInfo imageFormatInfo = new ImageFormatInfo();
imageFormatInfo.FormatType = ImageFormatType.Jpeg;
imageFormatInfo.JpegQuality = 90;
lock (saveImageLock)
{
int result = device.ImageSaver.SaveImageToFile(fullPath, frameForSave.Image, imageFormatInfo, CFAMethod.Optimal);
if (result == MvError.MV_OK)
{
return fullPath;
}
}
}
catch (Exception ex)
{
MessageBox.Show($"保存点位{positionIndex + 1}图像失败: " + ex.Message);
}
return null;
}
private void UpdateExcelFile()
{
try
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 设置EPPlus许可证
FileInfo file = new FileInfo(xlsFilePath);
using (ExcelPackage package = new ExcelPackage(file))
{
ExcelWorksheet worksheet;
if (package.Workbook.Worksheets.Count == 0)
{
// 创建新的工作表
worksheet = package.Workbook.Worksheets.Add("检测结果");
// 设置表头
worksheet.Cells[1, 1].Value = "循环次数";
worksheet.Cells[1, 2].Value = "pos1_width";
worksheet.Cells[1, 3].Value = "pos1_height";
worksheet.Cells[1, 4].Value = "pos2_width";
worksheet.Cells[1, 5].Value = "pos2_height";
worksheet.Cells[1, 6].Value = "pos3_width";
worksheet.Cells[1, 7].Value = "pos3_height";
worksheet.Cells[1, 8].Value = "pos4_width";
worksheet.Cells[1, 9].Value = "pos4_height";
}
else
{
worksheet = package.Workbook.Worksheets[0];
}
// 添加数据行
int row = worksheet.Dimension?.Rows + 1 ?? 2;
float[] lastCycleData = detectionData[detectionData.Count - 1];
worksheet.Cells[row, 1].Value = currentCycle;
for (int i = 0; i < 8 && i < lastCycleData.Length; i++)
{
worksheet.Cells[row, i + 2].Value = lastCycleData[i];
}
package.Save();
}
}
catch (Exception ex)
{
MessageBox.Show("更新Excel文件失败: " + ex.Message);
}
}
private void StopCycle()
{
isCycleRunning = false;
if (cycleThread != null && cycleThread.IsAlive)
{
cycleThread.Join(5000); // 等待5秒
}
// 关闭网络连接
StopDetection();
}
private void checkBox1_CheckedChanged_1(object sender, EventArgs e)
{
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
}
private void checkBox3_CheckedChanged(object sender, EventArgs e)
{
}
private void checkBox4_CheckedChanged(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
} }
} }

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,326 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup> </startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Collections.Concurrent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Collections" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.EventBasedAsync" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data.Common" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Contracts" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Debug" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Tools" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Dynamic.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Globalization" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Globalization.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Linq" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Linq.Expressions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Linq.Parallel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Linq.Queryable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.NetworkInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Requests" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Sockets" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ObjectModel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Resources.ResourceManager" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Numerics" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Json" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Xml" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.Principal" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.SecureString" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Text.RegularExpressions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.Overlapped" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Parallel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.Timer" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Xml.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Xml.XmlSerializer" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration> </configuration>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 749 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 752 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 765 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 727 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 739 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 739 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 732 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 732 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 742 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 742 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 663 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 KiB

Some files were not shown because too many files have changed in this diff Show More