| | |
| | | |
| | | set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage; |
| | | set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage; |
| | | set.IsAddtionalSaved = !string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); |
| | | set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); |
| | | set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; |
| | | |
| | | _imageSetList.Add(set); |
| | | _imageSetList[set.Id] = set; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | #endregion |
| | | |
| | | #region 图片缓存/保存 |
| | | public readonly ConcurrentBag<IImageSet> _imageSetList = new ConcurrentBag<IImageSet>(); |
| | | //public readonly ConcurrentBag<IImageSet> _imageSetList = new ConcurrentBag<IImageSet>(); |
| | | protected Dictionary<string, IImageSet> _imageSetList = new Dictionary<string, IImageSet>(); |
| | | |
| | | public void NewImageSet(IImageSet set) |
| | | { |
| | | set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage; |
| | | set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage; |
| | | set.IsAddtionalSaved = !string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); |
| | | set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); |
| | | set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; |
| | | _imageSetList.Add(set); |
| | | _imageSetList[set.Id] = set; |
| | | } |
| | | |
| | | //public virtual async void UpdateFitElements(List<IShapeElement> eleList, string imgSetId) |
| | |
| | | |
| | | public virtual async void SaveOriginImage(Bitmap map, Bitmap showImage, string imgSetId) |
| | | { |
| | | Task.Run(() => |
| | | await Task.Run(() => |
| | | { |
| | | OnImageUpdated?.Invoke(this, showImage, imgSetId); |
| | | }); |
| | | |
| | | IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); |
| | | IImageSet set = _imageSetList[imgSetId]; |
| | | |
| | | if (set == null) |
| | | return; |
| | |
| | | if (eleList.Count > 0) |
| | | OnElementsUpdated?.BeginInvoke(this, eleList, imgSetId, null, null); |
| | | |
| | | IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); |
| | | IImageSet set = _imageSetList[imgSetId]; |
| | | if (set == null) |
| | | return; |
| | | |
| | |
| | | { |
| | | await Task.Run(() => |
| | | { |
| | | IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); |
| | | IImageSet set = _imageSetList[imgSetId]; |
| | | if (set == null) |
| | | return; |
| | | |
| | |
| | | |
| | | //private Timer clearImageSetTimer = null; |
| | | |
| | | public void ClearImageSet(IImageSet set) |
| | | public virtual void ClearImageSet(IImageSet set) |
| | | { |
| | | try |
| | | { |
| | |
| | | // && (!set.ImageSaveOption.IsSaveNGImage || set.IsNGSaved)) |
| | | if (set.IsOriginSaved && set.IsFitSaved && set.IsAddtionalSaved) |
| | | { |
| | | _imageSetList.TryTake(out set); |
| | | set.Dispose(); |
| | | //LogAsync(DateTime.Now, $"移除图片信息,当前缓存数量:{_imageSetList.Count}", ""); |
| | | _imageSetList.Remove(set.Id); |
| | | LogAsync(DateTime.Now, $"移除图片信息,当前缓存数量:{_imageSetList.Count}", ""); |
| | | } |
| | | //bool flag = false; |
| | | |
| | |
| | | |
| | | public void ClearImageSet(string imgSetId) |
| | | { |
| | | IImageSet set = _imageSetList.First(u => u.Id == imgSetId); |
| | | IImageSet set = _imageSetList[imgSetId]; |
| | | if (set != null) |
| | | ClearImageSet(set); |
| | | } |
| | |
| | | }); |
| | | } |
| | | |
| | | protected async void Generate16GrayImageByPointer(int width, int height, IntPtr dataPtr, string imgSetId) |
| | | protected async Task Generate16GrayImageByPointer(int width, int height, IntPtr dataPtr, string imgSetId) |
| | | { |
| | | await Task.Run(() => |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | public interface IImageSet : IDisposable |
| | | public interface IImageSet:IDisposable |
| | | { |
| | | DateTime InitialTime { get; set; } |
| | | string Id { get; } |
| | |
| | | bool IsAddtionalSaved { get; set; } |
| | | |
| | | event Action<ImageSet> OnImageSetTimeout; |
| | | |
| | | /// <summary> |
| | | /// 序列化操作的图像信息 |
| | | /// </summary> |
| | | string ImageData { get; set; } |
| | | } |
| | | |
| | | public class ImageSet : IImageSet |
| | |
| | | |
| | | public object SaveLock { get; set; } = new object(); |
| | | |
| | | public virtual string ImageData { get; set; } |
| | | |
| | | public event Action<ImageSet> OnImageSetTimeout; |
| | | private Timer autoDisposeTimer = null; |
| | | |
| | | private void OnAutoDispose(object state) |
| | | public void Dispose(object state) |
| | | { |
| | | OnImageSetTimeout?.Invoke(this); |
| | | } |
| | | |
| | | public ImageSet() |
| | | { |
| | | autoDisposeTimer = new Timer(OnAutoDispose, null, -1, 10 * 1000); |
| | | autoDisposeTimer.Change(-1, -1); |
| | | autoDisposeTimer.Dispose(); |
| | | } |
| | | |
| | | public virtual void Dispose() |
| | | { |
| | | autoDisposeTimer.Change(-1, -1); |
| | | autoDisposeTimer.Dispose(); |
| | | Dispose(null); |
| | | } |
| | | |
| | | Image?.Dispose(); |
| | | Image = null; |
| | | |
| | | HImage?.Dispose(); |
| | | HImage = null; |
| | | public ImageSet() |
| | | { |
| | | autoDisposeTimer = new Timer(Dispose, null, 10 * 1000, -1); |
| | | } |
| | | #endregion |
| | | } |