private void worker_DoWork(object sender, DoWorkEventArgs e) { var item = ServiceProvider.Settings.SelectedBitmap.FileItem; if (ServiceProvider.Settings.SelectedBitmap.FileItem == null) { return; } //bool fullres = e.Argument is bool && (bool) e.Argument ||LayoutViewModel.ZoomFit //bool fullres = !LayoutViewModel.ZoomFit; bool fullres = e.Argument is bool && (bool)e.Argument; if ((!File.Exists(item.LargeThumb) && item.IsJpg && File.Exists(item.FileName))) { try { PhotoUtils.WaitForFile(item.FileName); ServiceProvider.Settings.SelectedBitmap.DisplayImage = (WriteableBitmap)BitmapLoader.Instance.LoadImage(item.FileName, BitmapLoader.LargeThumbSize, 0); } catch (Exception ex) { Log.Error("Unable to load fast preview", ex); } } ServiceProvider.Settings.ImageLoading = fullres || !ServiceProvider.Settings.SelectedBitmap.FileItem.IsLoaded; if (ServiceProvider.Settings.SelectedBitmap.FileItem.Loading) { while (ServiceProvider.Settings.SelectedBitmap.FileItem.Loading) { Thread.Sleep(10); } } else { BitmapLoader.Instance.GenerateCache(ServiceProvider.Settings.SelectedBitmap.FileItem); } if (!ServiceProvider.Settings.SelectedBitmap.FileItem.HaveHistogramReady()) { ServiceProvider.QueueManager.Add(new QueueItemFileItem { FileItem = ServiceProvider.Settings.SelectedBitmap.FileItem, Generate = QueueType.Histogram }); } ServiceProvider.Settings.SelectedBitmap.DisplayImage = BitmapLoader.Instance.LoadImage(ServiceProvider.Settings.SelectedBitmap.FileItem, fullres); BitmapLoader.Instance.SetData(ServiceProvider.Settings.SelectedBitmap, ServiceProvider.Settings.SelectedBitmap.FileItem); BitmapLoader.Highlight(ServiceProvider.Settings.SelectedBitmap, ServiceProvider.Settings.HighlightUnderExp, ServiceProvider.Settings.HighlightOverExp); ServiceProvider.Settings.SelectedBitmap.FullResLoaded = fullres; ServiceProvider.Settings.ImageLoading = false; GC.Collect(); Dispatcher.BeginInvoke(new Action(OnImageLoaded)); }
public bool Execute(QueueManager manager) { try { if (FileItem.ItemType != FileItemType.File) { return(true); } switch (Generate) { case QueueType.Thumb: if (File.Exists(FileItem.SmallThumb)) { var thumb = BitmapLoader.Instance.LoadSmallImage(FileItem); thumb.Freeze(); FileItem.Thumbnail = thumb; thumb = thumb.Clone(); BitmapLoader.Highlight(thumb, true, true); BitmapLoader.Instance.DrawFocusPoints(FileItem, thumb); thumb.Freeze(); FileItem.ThumbnailMarks = thumb; } else { FileItem.GetExtendedThumb(); if (ServiceProvider.Settings.SelectedBitmap.FileItem != FileItem) { ServiceProvider.QueueManager.Add(new QueueItemFileItem { FileItem = FileItem, Generate = QueueType.Cache }); } } break; case QueueType.Cache: BitmapLoader.Instance.GenerateCache(FileItem); if (!FileItem.HaveHistogramReady()) { ServiceProvider.QueueManager.AddWithLowPriority(new QueueItemFileItem { FileItem = FileItem, Generate = QueueType.Histogram }); } break; case QueueType.Histogram: BitmapLoader.Instance.LoadHistogram(FileItem); break; default: throw new ArgumentOutOfRangeException(); } } catch (Exception) { //Log.Error(e); } return(true); }