using Check.Main.Common;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Check.Main.Result
{
///
/// 代表一个待检测产品的类,存储来自多个相机的图像
///
public class ProductResult
{
///
/// 产品唯一ID,可以是时间戳或触发计数
///
public long ProductID { get; }
///
/// 存储每个相机名称和其拍摄到的图像
///
public Dictionary CapturedImages { get; }
public ProductResult(long productID)
{
ProductID = productID;
CapturedImages = new Dictionary();
}
///
/// 添加一张某个相机拍摄的图像
///
/// 相机名称
/// 拍摄的图像
public void AddImage(string cameraName, Bitmap image)
{
if (!CapturedImages.ContainsKey(cameraName))
{
CapturedImages.Add(cameraName, image);
}
else
{
// 如果这个键已经存在,说明发生了逻辑错误。
// 我们不应该持有这个新的 image 对象,必须释放它以防泄漏。
ThreadSafeLogger.Log($"[警告] 相机 {cameraName} 为产品 #{this.ProductID} 发送了重复的图像。多余的图像将被丢弃。");
image?.Dispose();
}
}
///
/// 检查是否所有预期的相机都已完成拍摄
///
/// 预期的相机数量
///
public bool IsComplete(int expectedCameraCount)
{
return CapturedImages.Count == expectedCameraCount;
}
///
/// 释放所有图像资源,防止内存泄漏
///
public void Dispose()
{
foreach (var image in CapturedImages.Values)
{
image?.Dispose();
}
CapturedImages.Clear();
}
}
}