Esempio n. 1
0
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Guard.Against.Null(Activity, nameof(Activity));

            // Identify minimum horizontal offset im source images
            var minOffset = Activity.Registrations.Select(p => p.OffsetX).Min();

            TargetImage = NewTargetImage(minOffset);

            _logger.LogInformation("Output image size: {width} x {height} px", TargetImage.Width, TargetImage.Height);

            // Composite all images. Images will have their horizontal offsets pre-calculated and overlaps
            // blended, so compositing just involves combining them in the correct stacking order.
            TargetImage.Mutate(imageContext =>
            {
                // Render all images in correct stacking order
                foreach (var registration in Activity.Registrations.OrderByDescending(p => p.OffsetX))
                {
                    using (registration)
                    {
                        var projectionImage = registration.Image;

                        // Identify horizontal offset of each image
                        var location = new Point(registration.OffsetX - minOffset, 0);
                        imageContext.DrawImage(projectionImage, location, PixelColorBlendingMode.Normal, 1.0f);
                    }
                }
            });

            return(ExecutionResult.Next());
        }
        private bool CanExecute_ImageExists(TargetImage args)
        {
            if (!CanExecute_ViewModelLoaded())
                return false;
            switch (args)
            {
                case TargetImage.Top:
                    return ViewModel.Textures.Top.Exists;
                case TargetImage.Bottom:
                    return ViewModel.Textures.Bottom.Exists;

                case TargetImage.FileLarge:
                    return ViewModel.Textures.FileLarge.Exists;

                case TargetImage.FileSmall:
                    return ViewModel.Textures.FileSmall.Exists;

                case TargetImage.FolderOpen:
                    return ViewModel.Textures.FolderOpen.Exists;

                case TargetImage.FolderClosed:
                    return ViewModel.Textures.FolderClosed.Exists;
                case TargetImage.TopAlt:
                    return ViewModel.Textures.TopAlt.Exists;

                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
        private void TargetImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var position = e.GetPosition(TargetImage);

            _drawStartPoint.X = (int)Math.Ceiling(position.X);
            _drawStartPoint.Y = (int)Math.Ceiling(position.Y);
            if (_drawStartPoint.X > 0)
            {
                _drawStartPoint.X--;
            }
            if (_drawStartPoint.Y > 0)
            {
                _drawStartPoint.Y--;
            }
            if (_drawingTool == DrawingTool.TextTool)
            {
                InsertTextToImage();
                return;
            }
            if (_drawingTool == DrawingTool.PickerTool)
            {
                DrawingInfo.CurrentColor    = System.Windows.Media.Color.FromArgb(255, _pickedColor.R, _pickedColor.G, _pickedColor.B);
                DrawingInfo.LeftSliderValue = _pickedColor.A;
                return;
            }
            _mouseCaptured = TargetImage.CaptureMouse();
            if (_drawingTool == DrawingTool.PenTool || _drawingTool == DrawingTool.EraserTool)
            {
                _linePoints.Clear();
                _linePoints.Add(new Point(_drawStartPoint.X, _drawStartPoint.Y));
                TargetImage_MouseMove(sender, e);//画点
            }
        }
Esempio n. 4
0
 public virtual void Dispose()
 {
     TargetImage?.Dispose();
     Activity?.Dispose();
     Registration?.Dispose();
     ProgressBar?.Dispose();
 }
Esempio n. 5
0
 // Use this for initialization
 void Start()
 {
     eventsManager = FindObjectOfType <CustomEventsManager>();
     eventsManager.OnMouseModeChanged += OnMouseModeChanged;
     eventsManager.OnDiggingChanged   += OnDiggingChanged;
     target = GetComponentInChildren <TargetImage>();
 }
Esempio n. 6
0
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Guard.Against.Null(_options.GeostationaryRender !.Longitude, nameof(GeostationaryRenderOptions.Longitude));
            Guard.Against.Null(Activity, nameof(Activity));
            Guard.Against.Null(TargetImage, nameof(TargetImage));

            var longitudeRange = Activity.GetVisibleLongitudeRange();

            // Determine visible range of all satellite imagery
            var longitudeDegrees = _options.GeostationaryRender !.Longitude !.Value;

            _logger.LogInformation("Reprojecting to geostationary with longitude {longitudeDegrees} degrees", longitudeDegrees);

            // Adjust longitude based on the underlay wrapping for visible satellites
            var adjustedLongitude = -Math.PI - longitudeRange.Start + Angle.FromDegrees(longitudeDegrees).Radians;

            // Render geostationary image
            using (var sourceImage = TargetImage.Clone())
            {
                TargetImage = sourceImage.ToGeostationaryProjection(adjustedLongitude, Constants.Satellite.DefaultHeight, _options);

                // Apply haze if required
                var hazeAmount = _options.GeostationaryRender.HazeAmount;
                if (hazeAmount > 0 && !_options.NoUnderlay)
                {
                    TargetImage.ApplyHaze(_options.Tint, hazeAmount);
                }
            }

            return(ExecutionResult.Next());
        }
Esempio n. 7
0
        public void Ended(ManipulationCompletedEventArgs e)
        {
            Apply(e.ManipulationOrigin);

            Element = null;
            RaiseElementChanged();
            TargetImage.Invalidate();
        }
Esempio n. 8
0
 public bool RemoveSetOrUpdateValue(string attributeName)
 {
     if (TargetImage == null)
     {
         throw new InvalidPluginExecutionException("No target image to remove value from");
     }
     return(TargetImage.RemoveAttribute(attributeName));
 }
Esempio n. 9
0
    private void updateUV()
    {
        if (TargetImage.texture == null)
        {
            return;
        }

        //テクスチャサイズ
        float tw = TargetImage.texture.width;
        float th = TargetImage.texture.height;
        //float tw_half = tw * 0.5f;
        float th_half = th * 0.5f;
        //オブジェクト位置
        RectTransform rectObjTrans = GetComponent <RectTransform>();
        Vector2       o_pos        = RectTransformUtility.WorldToScreenPoint(MainCamera, rectObjTrans.position);
        //オブジェクトサイズ
        float ow      = rectObjTrans.sizeDelta.x;
        float oh      = rectObjTrans.sizeDelta.y;
        float ow_half = ow * 0.5f;
        float oh_half = oh * 0.5f;
        //スクリーンサイズ
        float sw = MainCamera.pixelWidth;
        float sh = MainCamera.pixelHeight;
        //float sw_half = sw * 0.5f;
        float sh_half = sh * 0.5f;

        CanvasSetting canvasSetting = MainCanvas.GetComponent <CanvasSetting>();

        if (!canvasSetting.IsHeightReference)
        {
            float rate = DefaultCanvasSizeX / sw;

            o_pos *= rate;

            float   tmp0     = (sh_half * rate) - th_half;
            Vector2 o_pos_lu = new Vector2(o_pos.x - ow_half, o_pos.y - oh_half - tmp0);

            TargetImage.uvRect = new Rect(o_pos_lu.x / tw, o_pos_lu.y / th, ow / tw, oh / th);
        }
        else
        {
            float rate = DefaultCanvasSizeY / sh;

            o_pos *= rate;

            float   tmp0     = (sh_half * rate) - th_half;
            Vector2 o_pos_lu = new Vector2(o_pos.x - ow_half, o_pos.y - oh_half - tmp0);

            TargetImage.uvRect = new Rect((o_pos_lu.x + (canvasSetting.GetAddWidth() * 0.5f)) / tw, o_pos_lu.y / th, ow / tw, oh / th);
        }
#if UNITY_EDITOR
        TargetImage.OnRebuildRequested();
#endif
    }
Esempio n. 10
0
    private void Start()
    {
        var rect = GetComponent <RectTransform>();

        var X     = rect.position.x - rect.rect.width * rect.pivot.x;
        var Y     = rect.position.y - rect.rect.height * rect.pivot.y;
        var rectP = new Rect(X, Y, rect.rect.width, rect.rect.height);

        TargetImage = new TargetImage(rectP);

        TargetImage.Image = rect.GetComponent <Image>();
    }
Esempio n. 11
0
 private void TargetImage_MouseMove(object sender, MouseEventArgs e)
 {
     mousePos = new Point(e.X, e.Y);
     if (TargetImage.Capture && mousePos.X <= targetImgWidth &&
         mousePos.X >= 0 && mousePos.Y <= targetImgHeight &&
         mousePos.Y >= 0)
     {
         string tmp = "X: " + e.X.ToString() + "\nY:" + e.Y.ToString();
         MousePos.Text = tmp;
         TargetImage.Invalidate();
     }
 }
Esempio n. 12
0
        private void RemoveImage_Execute(TargetImage args)
        {
            switch (args)
            {
            case TargetImage.Top:
                ViewModel.Textures.Top.ClearTexture();
                break;

            case TargetImage.Bottom:
                ViewModel.Textures.Bottom.ClearTexture();
                break;

            case TargetImage.FileLarge:
                ViewModel.Textures.FileLarge.ClearTexture();
                break;

            case TargetImage.FileSmall:
                ViewModel.Textures.FileSmall.ClearTexture();
                break;

            case TargetImage.FolderOpen:
                ViewModel.Textures.FolderOpen.ClearTexture();
                break;

            case TargetImage.FolderClosed:
                ViewModel.Textures.FolderClosed.ClearTexture();
                break;

            case TargetImage.TopAlt:
                ViewModel.Textures.TopAlt.ClearTexture();
                break;

            case TargetImage.SmallIcon:
            {
                var icex  = new IconExtension(@"/ThemeEditor.WPF;component/Resources/Icons/app_icn.ico", 24);
                var large = ((BitmapSource)icex.ProvideValue(null)).CreateResizedImage(24, 24);
                ViewModel.Info.SmallIcon.EncodeTexture(large, RawTexture.DataFormat.Bgr565);
                break;
            }

            case TargetImage.LargeIcon:
            {
                var icex  = new IconExtension(@"/ThemeEditor.WPF;component/Resources/Icons/app_icn.ico", 48);
                var large = ((BitmapSource)icex.ProvideValue(null)).CreateResizedImage(48, 48);
                ViewModel.Info.LargeIcon.EncodeTexture(large, RawTexture.DataFormat.Bgr565);
                break;
            }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
 private void TargetImage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
 {
     if (_mouseCaptured)
     {
         TargetImage.ReleaseMouseCapture();
         _mouseCaptured = false;
     }
     if (!_drawingChanged)
     {
         return;
     }
     _drawingChanged = false;
     _drawingManager.Record();
 }
Esempio n. 14
0
        public override async Task <ExecutionResult> RunAsync(IStepExecutionContext context)
        {
            Guard.Against.Null(Activity, nameof(Activity));
            Guard.Against.Null(TargetImage, nameof(TargetImage));

            Activity.GetCropRange(out var latitudeRange, out var longitudeRange);

            // Load underlay
            if (_options.NoUnderlay)
            {
                // Draw stitched image over black background for non-PNG files because otherwise alpha can look odd
                TargetImage = !Path.GetExtension(_options.OutputPath).CompareOrdinalIgnoreCase(".png") ? TargetImage.AddBackgroundColour(Color.Black) : TargetImage;
                return(ExecutionResult.Next());
            }

            _logger.LogInformation("Tinting and normalising IR imagery");

            TargetImage.Mutate(imageContext =>
            {
                using var clone = TargetImage !.Clone();
                clone.AdjustLevels(_options.AdaptiveLevelAdjustment);
                TargetImage.Tint(_options.Tint);

                imageContext.DrawImage(clone, PixelColorBlendingMode.HardLight, 0.5f);
            });

            var underlayOptions = new UnderlayProjectionData(
                ProjectionType.Equirectangular,
                _options.InterpolationType,
                _options.UnderlayPath,
                _options.ImageSize,
                TargetImage !.Size(),
                latitudeRange,
                longitudeRange.Start,
                _options.EquirectangularRender?.NoCrop == true || _options.EquirectangularRender?.ExplicitCrop == true);

            _logger.LogInformation("Retrieving underlay");
            var underlay = await _underlayService.GetUnderlayAsync(underlayOptions);

            // Render target image onto underlay
            using (TargetImage)
            {
                _logger.LogInformation("Blending with underlay");
                underlay.Mutate(ctx => ctx.DrawImage(TargetImage, PixelColorBlendingMode.Screen, 1.0f));
            }

            TargetImage = underlay;

            return(ExecutionResult.Next());
        }
Esempio n. 15
0
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Guard.Against.Null(TargetImage, nameof(TargetImage));
            Guard.Against.Null(Activity, nameof(Activity));

            // Crop if required
            var equirectangularOptions = _options.EquirectangularRender !;

            if (!equirectangularOptions.NoCrop && CropBounds != null)
            {
                _logger.LogDebug("Crop bounds: {Bounds}", CropBounds);
                TargetImage.Mutate(ctx => ctx.Crop(CropBounds.Value));
            }

            return(ExecutionResult.Next());
        }
        private Task <LoadImageResults> DropImage_Execute(DragEventArgs args, TargetImage target)
        {
            var task = new Task <LoadImageResults>(() =>
            {
                var results = new LoadImageResults()
                {
                    Loaded = false,
                    Target = target
                };
                if (args.Data.GetDataPresent(DataFormats.FileDrop))
                {
                    string[] files = (string[])args.Data.GetData(DataFormats.FileDrop);
                    var file       = files[0];
                    try
                    {
                        using (var fs = File.OpenRead(file))
                        {
                            BitmapImage bmp = new BitmapImage();
                            bmp.BeginInit();
                            bmp.StreamSource = fs;
                            bmp.CacheOption  = BitmapCacheOption.OnLoad;
                            bmp.EndInit();
                            bmp.Freeze();

                            results.OriginalWidth  = bmp.PixelWidth;
                            results.OriginalHeight = bmp.PixelHeight;

                            var potBmp = bmp.CreateResizedNextPot();
                            potBmp.Freeze();

                            results.Loaded = true;
                            results.Image  = potBmp;
                        }
                    }
                    catch
                    {
                        // ignored
                    }
                }
                return(results);
            });

            task.Start();
            args.Handled = true;
            return(task);
        }
Esempio n. 17
0
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Guard.Against.Null(Longitude, nameof(Longitude));
            Guard.Against.Null(Activity, nameof(Activity));
            Guard.Against.Null(TargetImage, nameof(TargetImage));

            // Determine visible range of all satellite imagery
            _logger.LogInformation("Reprojecting to geostationary with longitude {longitude} degrees", Angle.FromRadians(Longitude !.Value).Degrees);

            // Render geostationary image
            using (var sourceImage = TargetImage.Clone())
            {
                TargetImage = sourceImage.ToGeostationaryProjection(Longitude.Value, Constants.Satellite.DefaultHeight, _options);
            }

            return(ExecutionResult.Next());
        }
Esempio n. 18
0
        private bool CanExecute_ImageExists(TargetImage args)
        {
            if (!CanExecute_ViewModelLoaded())
            {
                return(false);
            }
            switch (args)
            {
            case TargetImage.Top:
                return(ViewModel.Textures.Top.Exists);

            case TargetImage.Bottom:
                return(ViewModel.Textures.Bottom.Exists);

            case TargetImage.FileLarge:
                return(ViewModel.Textures.FileLarge.Exists);

            case TargetImage.FileSmall:
                return(ViewModel.Textures.FileSmall.Exists);

            case TargetImage.FolderOpen:
                return(ViewModel.Textures.FolderOpen.Exists);

            case TargetImage.FolderClosed:
                return(ViewModel.Textures.FolderClosed.Exists);

            case TargetImage.TopAlt:
                return(ViewModel.Textures.TopAlt.Exists);

            case TargetImage.SmallIcon:
                return(ViewModel.Info.SmallIcon.Exists);

            case TargetImage.LargeIcon:
                return(ViewModel.Info.LargeIcon.Exists);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        private Task<LoadImageResults> DropImage_Execute(DragEventArgs args, TargetImage target)
        {
            var task = new Task<LoadImageResults>(() =>
            {
                var results = new LoadImageResults()
                {
                    Loaded = false,
                    Target = target
                };
                if (args.Data.GetDataPresent(DataFormats.FileDrop))
                {
                    string[] files = (string[]) args.Data.GetData(DataFormats.FileDrop);
                    var file = files[0];
                    try
                    {
                        using (var fs = File.OpenRead(file))
                        {
                            BitmapImage bmp = new BitmapImage();
                            bmp.BeginInit();
                            bmp.StreamSource = fs;
                            bmp.CacheOption = BitmapCacheOption.OnLoad;
                            bmp.EndInit();
                            bmp.Freeze();

                            results.Loaded = true;
                            results.Image = bmp;
                        }
                    }
                    catch
                    {
                        // ignored
                    }
                }
                return results;
            });
            task.Start();
            args.Handled = true;
            return task;
        }
Esempio n. 20
0
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Guard.Against.Null(Longitude, nameof(Longitude));
            Guard.Against.Null(Activity, nameof(Activity));
            Guard.Against.Null(TargetImage, nameof(TargetImage));

            var longitudeRange = Activity.GetVisibleLongitudeRange();

            // Determine visible range of all satellite imagery
            _logger.LogInformation("Reprojecting to geostationary with longitude {longitude} degrees", Angle.FromRadians(Longitude !.Value).Degrees);

            // Adjust longitude based on the underlay wrapping for visible satellites
            var adjustedLongitude = -Math.PI - longitudeRange.Start + Longitude !.Value;

            // Render geostationary image
            using (var sourceImage = TargetImage.Clone())
            {
                TargetImage = sourceImage.ToGeostationaryProjection(adjustedLongitude, Constants.Satellite.DefaultHeight, _options);
            }

            return(ExecutionResult.Next());
        }
Esempio n. 21
0
        public void SetAlgorithm()
        {
            switch ((AlgorithmEnum)algorithmSelectMenu.SelectedItem)
            {
            case AlgorithmEnum.SingleDeleteChangeInsert:
                Algorithm = new SingleDeleteChangeInsert(PictureMutationAlgorithm.ScoringMethodEnum.FullEvaluationScoring);
                break;

            case AlgorithmEnum.SinglePolygonFullSpace:
                Algorithm = new SinglePolygonFullSpace(PictureMutationAlgorithm.ScoringMethodEnum.FullEvaluationScoring);
                break;

            case AlgorithmEnum.ConstantPointCount:
                Algorithm = new ConstantPointCount(PictureMutationAlgorithm.ScoringMethodEnum.FullEvaluationScoring);
                break;
            }
            TargetImage.Maybe(() =>
            {
                Algorithm.SetImage(TargetImage);
                Algorithm.SetInitial();
            });
            AlgorithmChanged();
        }
Esempio n. 22
0
        private void TargetImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (e.LeftButton != MouseButtonState.Pressed)
            {
                return;
            }
            var position = e.GetPosition(TargetImage);
            var x        = (int)position.X;
            var y        = (int)position.Y;

            _startPoint.X   = x;
            _startPoint.Y   = y;
            CropRect.Width  = 0;
            CropRect.Height = 0;

            TopValueLbl.Content    = 0;
            LeftValueLbl.Content   = 0;
            WidthValueLbl.Content  = 0;
            HeightValueLbl.Content = 0;

            TargetImage.CaptureMouse();
            _isMousePressed = true;
        }
Esempio n. 23
0
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Guard.Against.Null(TargetImage, nameof(TargetImage));

            var autoCrop = _options.EquirectangularRender?.AutoCrop ?? false;
            var extents  = _options.EquirectangularRender?.Extents;

            if (!autoCrop && extents == null)
            {
                return(ExecutionResult.Next());
            }

            if (autoCrop)
            {
                CropBounds = TargetImage.GetAutoCropBounds();

                if (CropBounds == null)
                {
                    _logger.LogError("Unable to determine autocrop bounds");
                }
                else
                {
                    _logger.LogInformation("Cropped image size: {width} x {height} px", CropBounds.Value.Width, CropBounds.Value.Height);
                }
            }
            else
            {
                var xPixelRange = extents !.Value.Longitude.UnwrapLongitude().ToPixelRangeX(TargetImage.Width);
                var yPixelRange = extents !.Value.Latitude.ToPixelRangeY(TargetImage.Height);

                _logger.LogInformation("Cropped image size: {width} x {height} px", xPixelRange.Range, yPixelRange.Range);

                CropBounds = new Rectangle(0, xPixelRange.Range, yPixelRange.Start, yPixelRange.Range);
            }

            return(ExecutionResult.Next());
        }
        private Task<LoadImageResults> LoadImage_Execute(TargetImage targetImage)
        {
            var busyPickingFile = MainResources.Busy_PickingFile;
            var busyOpeningImage = MainResources.Busy_OpeningImage;
            var task = new Task<LoadImageResults>(() =>
            {
                BusyText = busyPickingFile;
                var opfl = new OpenFileDialog
                {
                    Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp",
                    Multiselect = false
                };
                var dlg = opfl.ShowDialog();
                LoadImageResults results = new LoadImageResults
                {
                    Loaded = false,
                    Target = targetImage
                };
                if (!dlg.HasValue || dlg.Value)
                {
                    BusyText = busyOpeningImage;
                    try
                    {
                        using (var fs = File.OpenRead(opfl.FileName))
                        {
                            BitmapImage bmp = new BitmapImage();
                            bmp.BeginInit();
                            bmp.StreamSource = fs;
                            bmp.CacheOption = BitmapCacheOption.OnLoad;
                            bmp.EndInit();
                            bmp.Freeze();

                            BitmapSource bmpSrc;

                            switch (targetImage)
                            {
                                case TargetImage.Bottom:
                                case TargetImage.Top:
                                case TargetImage.FileLarge:
                                case TargetImage.FileSmall:
                                case TargetImage.FolderOpen:
                                case TargetImage.FolderClosed:
                                case TargetImage.TopAlt:
                                    bmpSrc = bmp.CreateResizedNextPot();
                                    bmpSrc.Freeze();
                                    break;
                                case TargetImage.SmallIcon:
                                case TargetImage.LargeIcon:
                                default:
                                    bmpSrc = bmp;
                                    break;
                            }

                            results.Loaded = true;
                            results.Image = bmpSrc;
                        }
                    }
                    catch
                    {
                        // ignored
                    }
                }
                return results;
            });
            task.Start();
            return task;
        }
 private void RemoveImage_Execute(TargetImage args)
 {
     switch (args)
     {
         case TargetImage.Top:
             ViewModel.Textures.Top.ClearTexture();
             break;
         case TargetImage.Bottom:
             ViewModel.Textures.Bottom.ClearTexture();
             break;
         case TargetImage.FileLarge:
             ViewModel.Textures.FileLarge.ClearTexture();
             break;
         case TargetImage.FileSmall:
             ViewModel.Textures.FileSmall.ClearTexture();
             break;
         case TargetImage.FolderOpen:
             ViewModel.Textures.FolderOpen.ClearTexture();
             break;
         case TargetImage.FolderClosed:
             ViewModel.Textures.FolderClosed.ClearTexture();
             break;
         case TargetImage.TopAlt:
             ViewModel.Textures.TopAlt.ClearTexture();
             break;
         case TargetImage.SmallIcon:
         {
             var icex = new IconExtension(@"/ThemeEditor.WPF;component/Resources/Icons/app_icn.ico", 24);
             var large = ((BitmapSource) icex.ProvideValue(null)).CreateResizedImage(24, 24);
             ViewModel.Info.SmallIcon.EncodeTexture( large, RawTexture.DataFormat.Bgr565);
             break;
         }
         case TargetImage.LargeIcon:
         {
             var icex = new IconExtension(@"/ThemeEditor.WPF;component/Resources/Icons/app_icn.ico", 48);
             var large = ((BitmapSource) icex.ProvideValue(null)).CreateResizedImage(48, 48);
             ViewModel.Info.LargeIcon.EncodeTexture(large, RawTexture.DataFormat.Bgr565);
             break;
         }
         default:
             throw new ArgumentOutOfRangeException();
     }
 }
Esempio n. 26
0
        private Task <LoadImageResults> LoadImage_Execute(TargetImage targetImage)
        {
            var busyPickingFile  = MainResources.Busy_PickingFile;
            var busyOpeningImage = MainResources.Busy_OpeningImage;
            var task             = new Task <LoadImageResults>(() =>
            {
                BusyText = busyPickingFile;
                var opfl = new OpenFileDialog
                {
                    Filter      = "Image Files|*.jpg;*.jpeg;*.png;*.bmp",
                    Multiselect = false
                };
                var dlg = opfl.ShowDialog();
                LoadImageResults results = new LoadImageResults
                {
                    Loaded = false,
                    Target = targetImage
                };
                if (!dlg.HasValue || dlg.Value)
                {
                    BusyText = busyOpeningImage;
                    try
                    {
                        using (var fs = File.OpenRead(opfl.FileName))
                        {
                            BitmapImage bmp = new BitmapImage();
                            bmp.BeginInit();
                            bmp.StreamSource = fs;
                            bmp.CacheOption  = BitmapCacheOption.OnLoad;
                            bmp.EndInit();
                            bmp.Freeze();

                            BitmapSource bmpSrc;

                            switch (targetImage)
                            {
                            case TargetImage.Bottom:
                            case TargetImage.Top:
                            case TargetImage.FileLarge:
                            case TargetImage.FileSmall:
                            case TargetImage.FolderOpen:
                            case TargetImage.FolderClosed:
                            case TargetImage.TopAlt:
                                bmpSrc = bmp.CreateResizedNextPot();
                                bmpSrc.Freeze();
                                break;

                            case TargetImage.SmallIcon:
                            case TargetImage.LargeIcon:
                            default:
                                bmpSrc = bmp;
                                break;
                            }

                            results.Loaded = true;
                            results.Image  = bmpSrc;
                        }
                    }
                    catch
                    {
                        // ignored
                    }
                }
                return(results);
            });

            task.Start();
            return(task);
        }
Esempio n. 27
0
        private Task <SaveImageResults> ExportImage_Execute(TargetImage targetImage)
        {
            var busyPickingFile = MainResources.Busy_PickingFile;
            var busySavingImage = MainResources.Busy_SavingImage;

            BitmapSource target;

            switch (targetImage)
            {
            case TargetImage.Top:
                target = ViewModel.Textures.Top.Bitmap;
                break;

            case TargetImage.Bottom:
                target = ViewModel.Textures.Bottom.Bitmap;
                break;

            case TargetImage.FileLarge:
                target = ViewModel.Textures.FileLarge.Bitmap;
                break;

            case TargetImage.FileSmall:
                target = ViewModel.Textures.FileSmall.Bitmap;
                break;

            case TargetImage.FolderOpen:
                target = ViewModel.Textures.FolderOpen.Bitmap;
                break;

            case TargetImage.FolderClosed:
                target = ViewModel.Textures.FolderClosed.Bitmap;
                break;

            case TargetImage.TopAlt:
                target = ViewModel.Textures.TopAlt.Bitmap;
                break;

            case TargetImage.SmallIcon:
                target = ViewModel.Info.SmallIcon.Bitmap;
                break;

            case TargetImage.LargeIcon:
                target = ViewModel.Info.LargeIcon.Bitmap;
                break;

            default:
                throw new IndexOutOfRangeException();
            }

            var task = new Task <SaveImageResults>(() =>
            {
                BusyText = busyPickingFile;
                var svfl = new SaveFileDialog
                {
                    Filter   = "PNG Files|*.png",
                    FileName = targetImage.ToString().ToLower()
                };
                var dlg = svfl.ShowDialog();
                SaveImageResults results = new SaveImageResults
                {
                    Saved  = false,
                    Target = targetImage,
                    Path   = svfl.FileName
                };

                if (!dlg.HasValue || dlg.Value)
                {
                    BusyText = busySavingImage;
                    try
                    {
                        PngBitmapEncoder encoder = new PngBitmapEncoder();
                        encoder.Frames.Add(BitmapFrame.Create(target));
                        using (var fs = File.Open(results.Path, FileMode.Create))
                        {
                            encoder.Save(fs);
                            results.Saved = true;
                        }
                    }
                    catch
                    {
                        // Ignore;
                    }
                }
                return(results);
            });

            task.Start();
            return(task);
        }
Esempio n. 28
0
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Guard.Against.Null(TargetImage, nameof(TargetImage));
            Guard.Against.Null(Activity, nameof(Activity));

            var autoCrop     = _options.EquirectangularRender?.AutoCrop ?? false;
            var explicitCrop = _options.EquirectangularRender?.ExplicitCrop ?? false;


            // TODO document all of this - entire class really
            // Also, refactor. It's a mess.
            if (!autoCrop && !explicitCrop)
            {
                CropBounds = !FullEarthCoverage?GetPartialCoverageBounds(Activity, TargetImage) : TargetImage.Bounds();

                return(ExecutionResult.Next());
            }

            CropBounds = autoCrop ? GetAutoCropBounds(TargetImage) : GetExplicitCropBounds(TargetImage);

            _logger.LogInformation("Cropped image size: {Width} x {Height} px", CropBounds.Width, CropBounds.Height);

            return(ExecutionResult.Next());
        }
 private void RemoveImage_Execute(TargetImage args)
 {
     switch (args)
     {
         case TargetImage.Top:
             ViewModel.Textures.Top.ClearTexture();
             break;
         case TargetImage.Bottom:
             ViewModel.Textures.Bottom.ClearTexture();
             break;
         case TargetImage.FileLarge:
             ViewModel.Textures.FileLarge.ClearTexture();
             break;
         case TargetImage.FileSmall:
             ViewModel.Textures.FileSmall.ClearTexture();
             break;
         case TargetImage.FolderOpen:
             ViewModel.Textures.FolderOpen.ClearTexture();
             break;
         case TargetImage.FolderClosed:
             ViewModel.Textures.FolderClosed.ClearTexture();
             break;
         case TargetImage.TopAlt:
             ViewModel.Textures.TopAlt.ClearTexture();
             break;
         default:
             throw new ArgumentOutOfRangeException();
     }
 }
        private Task<LoadImageResults> LoadImage_Execute(TargetImage targetImage)
        {
            var busyPickingFile = MainResources.Busy_PickingFile;
            var busyOpeningImage = MainResources.Busy_OpeningImage;
            var task = new Task<LoadImageResults>(() =>
            {
                BusyText = busyPickingFile;
                var opfl = new OpenFileDialog
                {
                    Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp",
                    Multiselect = false
                };
                var dlg = opfl.ShowDialog();
                LoadImageResults results = new LoadImageResults
                {
                    Loaded = false,
                    Target = targetImage
                };
                if (!dlg.HasValue || dlg.Value)
                {
                    BusyText = busyOpeningImage;
                    try
                    {
                        using (var fs = File.OpenRead(opfl.FileName))
                        {
                            BitmapImage bmp = new BitmapImage();
                            bmp.BeginInit();
                            bmp.StreamSource = fs;
                            bmp.CacheOption = BitmapCacheOption.OnLoad;
                            bmp.EndInit();
                            bmp.Freeze();

                            results.Loaded = true;
                            results.Image = bmp;
                        }
                    }
                    catch
                    {
                        // ignored
                    }
                }
                return results;
            });
            task.Start();
            return task;
        }
        private Task<SaveImageResults> ExportImage_Execute(TargetImage targetImage)
        {
            var busyPickingFile = MainResources.Busy_PickingFile;
            var busySavingImage = MainResources.Busy_SavingImage;

            BitmapSource target;
            switch (targetImage)
            {
                case TargetImage.Top:
                    target = ViewModel.Textures.Top.Bitmap;
                    break;
                case TargetImage.Bottom:
                    target = ViewModel.Textures.Bottom.Bitmap;
                    break;
                case TargetImage.FileLarge:
                    target = ViewModel.Textures.FileLarge.Bitmap;
                    break;
                case TargetImage.FileSmall:
                    target = ViewModel.Textures.FileSmall.Bitmap;
                    break;
                case TargetImage.FolderOpen:
                    target = ViewModel.Textures.FolderOpen.Bitmap;
                    break;
                case TargetImage.FolderClosed:
                    target = ViewModel.Textures.FolderClosed.Bitmap;
                    break;
                case TargetImage.TopAlt:
                    target = ViewModel.Textures.TopAlt.Bitmap;
                    break;
                default:
                    throw new IndexOutOfRangeException();
            }

            var task = new Task<SaveImageResults>(() =>
            {
                BusyText = busyPickingFile;
                var svfl = new SaveFileDialog
                {
                    Filter = "PNG Files|*.png",
                    FileName = targetImage.ToString().ToLower()
                };
                var dlg = svfl.ShowDialog();
                SaveImageResults results = new SaveImageResults
                {
                    Saved = false,
                    Target = targetImage,
                    Path = svfl.FileName
                };

                if (!dlg.HasValue || dlg.Value)
                {
                    BusyText = busySavingImage;
                    try
                    {
                        PngBitmapEncoder encoder = new PngBitmapEncoder();
                        encoder.Frames.Add(BitmapFrame.Create(target));
                        using (var fs = File.Open(results.Path, FileMode.Create))
                        {
                            encoder.Save(fs);
                            results.Saved = true;
                        }
                    }
                    catch
                    {
                        // Ignore;
                    }
                }
                return results;
            });
            task.Start();
            return task;
        }
Esempio n. 32
0
 private void TargetImage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
 {
     _isMousePressed = false;
     TargetImage.ReleaseMouseCapture();
 }
Esempio n. 33
0
 public bool IsBeingSetOrUpdated(string attributeName)
 {
     return(TargetImage != null && TargetImage.Contains(attributeName));
 }