예제 #1
0
        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));
        }
예제 #2
0
        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);
        }