using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace LB_SmartVisionCommon
|
{
|
public class FilterManager
|
{
|
private Dictionary<FilterType, RecordFilterData> _filters;
|
private readonly string _dataFilePath;
|
private RecordFilterData _currentFilter;
|
private static FilterManager _instance;
|
/// <summary>
|
/// 线程锁
|
/// </summary>
|
private static readonly object _lock = new object();
|
private FilterManager(string dataFilePath = "filters.json")
|
{
|
_dataFilePath = dataFilePath;
|
_filters = new Dictionary<FilterType, RecordFilterData>();
|
_currentFilter = null;
|
LoadUsers();
|
}
|
public static FilterManager Instance
|
{
|
get
|
{
|
// 双重检查锁定确保线程安全
|
if (_instance == null)
|
{
|
lock (_lock)
|
{
|
if (_instance == null)
|
{
|
_instance = new FilterManager();
|
}
|
}
|
}
|
return _instance;
|
}
|
}
|
|
/// <summary>
|
/// 添加滤波算子
|
/// </summary>
|
/// <param name="user"></param>
|
/// <returns></returns>
|
public bool AddFilter(RecordFilterData filter)
|
{
|
if (_currentFilter == null)
|
{
|
_currentFilter = filter;
|
}
|
try
|
{
|
RecordFilterData recordFilterData = new RecordFilterData();
|
recordFilterData.MaskWidth = filter.MaskWidth;
|
recordFilterData.MaskHight = filter.MaskHight;
|
recordFilterData.GaussSize = filter.GaussSize;
|
recordFilterData.FilterName = filter.FilterName;
|
_filters.Add(recordFilterData.FilterName, recordFilterData);
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show("该算子已存在");
|
}
|
SaveUsers();
|
return true;
|
}
|
|
/// <summary>
|
/// 删除图像增强算子
|
/// </summary>
|
/// <param name="filterName"></param>
|
/// <returns></returns>
|
public bool DeleteUser(RecordFilterData filter)
|
{
|
try
|
{
|
// 1. 从字典中删除
|
if (_filters.ContainsKey(filter.FilterName))
|
{
|
_filters.Remove(filter.FilterName);
|
}
|
|
// 2. 如果删除的是当前滤波,清空_currentFilter
|
if (_currentFilter != null && _currentFilter.FilterName == filter.FilterName)
|
{
|
_currentFilter = null;
|
}
|
|
// 3. 保存更改
|
SaveUsers();
|
|
return true;
|
}
|
catch (Exception ex)
|
{
|
// 记录日志
|
Console.WriteLine($"删除滤波失败: {ex.Message}");
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// 获取所有用户列表
|
/// </summary>
|
/// <returns>List<RecordUserData></returns>
|
public List<RecordFilterData> GetAllUsers()
|
{
|
return _filters.Select(u => u.Value.Clone()).ToList();
|
}
|
|
#region json文件保存加载
|
/// <summary>
|
/// 保存用户数据到JSON文件
|
/// </summary>
|
private void SaveUsers()
|
{
|
try
|
{
|
ConfigManager<Dictionary<FilterType, RecordFilterData>>.SaveConfig<Dictionary<FilterType, RecordFilterData>>(_filters, _dataFilePath);
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show($"保存图像增强算子失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
}
|
}
|
|
/// <summary>
|
/// 从JSON文件加载用户数据
|
/// </summary>
|
private void LoadUsers()
|
{
|
try
|
{
|
if (File.Exists(_dataFilePath))
|
{
|
_filters = ConfigManager<Dictionary<FilterType, RecordFilterData>>.LoadConfig<Dictionary<FilterType, RecordFilterData>>(_dataFilePath) ?? new Dictionary<FilterType, RecordFilterData>();
|
}
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show($"加载图像增强算子失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
_filters = new Dictionary<FilterType, RecordFilterData>();
|
}
|
}
|
#endregion
|
}
|
}
|