Reset() public method

public Reset ( ) : void
return void
コード例 #1
0
ファイル: MainPage.xaml.cs プロジェクト: cugayck5/stuart
        void Canvas_PointerPressed(object sender, PointerRoutedEventArgs e)
        {
            if (editingRegion != null)
            {
                return;
            }

            // If any of the edit groups is in edit region mode, set that as our current region.
            editingRegion = photo.Edits.SingleOrDefault(edit => edit.IsEditingRegion);

            if (editingRegion == null)
            {
                return;
            }

            // Add the start point.
            regionPoints.Add(ConvertDipsToPixels(e.GetCurrentPoint(canvas)));

            // Set the manipulation mode so we grab all input, bypassing our parent ScrollViewer.
            canvas.ManipulationMode = ManipulationModes.All;
            canvas.CapturePointer(e.Pointer);

            cachedImage.Reset();

            canvas.Invalidate();
            e.Handled = true;
        }
コード例 #2
0
        public void EditRegionMask(List <Vector2> points, float zoomFactor)
        {
            if (regionMask == null)
            {
                // Demand-create our region mask image.
                regionMask = new CanvasRenderTarget(SourceBitmap.Device, Parent.Size.X, Parent.Size.Y, 96);
            }
            else
            {
                // Back up the previous mask, to support undo.
                previousRegionMask = currentRegionMask;
            }

            // Prepare an ICanvasImage holding the edit to be applied.
            ICanvasImage editMask;

            if (RegionSelectionMode == SelectionMode.MagicWand)
            {
                // Magic wand selection is already an image.
                editMask = GetMagicWandMask(points, zoomFactor);
            }
            else
            {
                // Capture selection geometry into a command list.
                var commandList = new CanvasCommandList(regionMask.Device);

                using (var drawingSession = commandList.CreateDrawingSession())
                {
                    // If this was just a touch without move, treat it as selecting the entire image.
                    var dragRange = points.Select(point => Vector2.Distance(point, points[0])).Max() * zoomFactor;

                    if (dragRange < 10)
                    {
                        drawingSession.Clear(Colors.White);
                    }
                    else
                    {
                        // Draw selection geometry.
                        var geometry = GetSelectionGeometry(drawingSession, points);

                        drawingSession.FillGeometry(geometry, Colors.White);
                    }
                }

                editMask = commandList;
            }

            // Apply the edit.
            using (var drawingSession = regionMask.CreateDrawingSession())
            {
                CanvasComposite compositeMode;

                switch (RegionSelectionOperation)
                {
                case SelectionOperation.Replace:
                    drawingSession.Clear(Colors.Transparent);
                    compositeMode = CanvasComposite.SourceOver;
                    break;

                case SelectionOperation.Add:
                    compositeMode = CanvasComposite.SourceOver;
                    break;

                case SelectionOperation.Subtract:
                    compositeMode = CanvasComposite.DestinationOut;
                    break;

                case SelectionOperation.Invert:
                    compositeMode = CanvasComposite.Xor;
                    break;

                default:
                    throw new NotSupportedException();
                }

                drawingSession.DrawImage(editMask, Vector2.Zero, regionMask.Bounds, 1, CanvasImageInterpolation.Linear, compositeMode);
            }

            // Back up the mask, so we can recover from lost devices.
            currentRegionMask = regionMask.GetPixelBytes();

            cachedRegionMask.Reset();

            CanUndo = true;
        }