示例#1
0
        private void AddBitmapToCanvas(TouchManipulationBitmap bitmap)
        {
            var   rectImage   = SkiaHelper.CalculateRectangle(rectInfo, outImageWidht, outImageHeight).rect;
            float scale       = 0.25f;
            var   rectSticker = new SKRect(rectImage.Left + rectImage.Width * scale, rectImage.Top + rectImage.Height * scale, rectImage.Right - rectImage.Width * scale, rectImage.Bottom - rectImage.Height * scale);
            var   rect        = SkiaHelper.CalculateRectangle(rectSticker, bitmap.Bitmap.Width, bitmap.Bitmap.Height);

            bitmap.Matrix = new SKMatrix(rect.scaleX, 0, rectInfo.MidX - rect.rect.Width / 2, 0, rect.scaleY, rectInfo.MidY - rect.rect.Height / 2, 0, 0, 1);
            bitmapCollection.Add(bitmap);
        }
示例#2
0
        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    config           = null;
                    bitmapDictionary = null;
                    inProgressPaths?.Clear();
                    inProgressPaths   = null;
                    TrashEnabled      = null;
                    TextBitmapClicked = null;
                }

                backgroundBitmap?.Dispose();
                backgroundBitmap = null;
                mainBitmap?.Bitmap.Dispose();
                if (mainBitmap != null)
                {
                    mainBitmap.Bitmap = null;
                }
                backgroundBitmap = null;
                mainBitmap       = null;

                foreach (var a in completedPaths)
                {
                    a.Dispose();
                }
                completedPaths?.Clear();
                completedPaths = null;

                foreach (var a in bitmapCollection)
                {
                    if (a.Type != BitmapType.Stickers)
                    {
                        a.Bitmap?.Dispose();
                    }
                    a.Bitmap = null;
                }
                bitmapCollection = null;

                disposedValue = true;
            }
        }
示例#3
0
        private void SetMainBitmap(SKBitmap bitmap)
        {
            outImageWidht  = config?.IsOutImageAutoSize ?? false ? bitmap?.Width ?? 1 : config?.OutImageWidht ?? 1;
            outImageHeight = config?.IsOutImageAutoSize ?? false ? bitmap?.Height ?? 1 : config?.OutImageHeight ?? 1;

            backgroundBitmap?.Dispose();
            backgroundBitmap = config.BackgroundType == BackgroundType.StretchedImage ? SKBitmapBuilder.GetBlurBitmap(bitmap, new SKRect(0, 0, outImageWidht, outImageHeight)) : null;

            mainBitmap?.Bitmap?.Dispose();
            if (mainBitmap == null)
            {
                mainBitmap = new TouchManipulationBitmap(bitmap, BitmapType.Main, null);
            }
            else
            {
                mainBitmap.Bitmap = bitmap;
            }

            SetMainBitmapMatrix();
        }
示例#4
0
        private void OnTouchBitmapEffectAction(TouchActionEventArgs args, SKPoint point)
        {
            if (args.Type != TouchActionType.Moved)
            {
                TrashEnabled?.Invoke(false, false, false);
            }

            if (bitmapDictionary == null)
            {
                bitmapDictionary = new Dictionary <long, TouchManipulationBitmap>();
            }
            if (bitmapCollection == null)
            {
                bitmapCollection = new List <TouchManipulationBitmap>();
            }

            switch (args.Type)
            {
            case TouchActionType.Pressed:
                if (!bitmapDictionary.ContainsKey(args.Id))
                {
                    bool isFindBitmap = false;
                    if (bitmapCollection?.Count > 0)
                    {
                        for (int i = bitmapCollection.Count - 1; i >= 0; i--)
                        {
                            TouchManipulationBitmap bitmap = bitmapCollection[i];

                            int testResult = bitmap.HitTest(point, rectInfo);
                            if (testResult != -1)
                            {
                                if (Device.RuntimePlatform == Device.UWP)
                                {
                                    bitmap.TouchManager.Mode = testResult == 4 ? TouchManipulationMode.ScaleRotate : TouchManipulationMode.ScaleDualRotate;
                                }

                                bitmap.TouchAction = TouchActionType.Pressed;
                                bitmapCollection.Remove(bitmap);
                                bitmapCollection.Add(bitmap);

                                // 进行触摸处理
                                bitmapDictionary.Add(args.Id, bitmap);
                                bitmap.ProcessTouchEvent(args.Id, args.Type, point);
                                isFindBitmap = true;
                                InvalidateSurface();
                                break;
                            }
                        }
                    }
                    if ((config?.CanTransformMainBitmap ?? false) && !isFindBitmap && mainBitmap.HitTest(point, rectInfo) != -1)
                    {
                        bitmapDictionary.Add(args.Id, mainBitmap);
                        mainBitmap.ProcessTouchEvent(args.Id, args.Type, point);
                        InvalidateSurface();
                    }
                }

                break;

            case TouchActionType.Moved:
                if (bitmapDictionary.ContainsKey(args.Id))
                {
                    TouchManipulationBitmap bitmap = bitmapDictionary[args.Id];
                    bitmap.TouchAction = TouchActionType.Moved;

                    bitmap.ProcessTouchEvent(args.Id, args.Type, point);
                    if (bitmap.Type != BitmapType.Main)
                    {
                        if (rectTrash.Contains(point))
                        {
                            TrashEnabled?.Invoke(false, true, !rectTrash.Contains(previousTouchPoint));
                        }
                        else
                        {
                            TrashEnabled?.Invoke(true, false, false);
                        }
                    }
                    else
                    {
                        TrashEnabled?.Invoke(false, false, false);
                    }

                    InvalidateSurface();
                }
                else
                {
                    TrashEnabled?.Invoke(false, false, false);
                }

                break;

            case TouchActionType.Released:
            case TouchActionType.Cancelled:
                if (bitmapDictionary.ContainsKey(args.Id))
                {
                    TouchManipulationBitmap bitmap = bitmapDictionary[args.Id];
                    bitmap.ProcessTouchEvent(args.Id, args.Type, point);
                    bitmapDictionary.Remove(args.Id);

                    if (bitmap.TouchAction == TouchActionType.Pressed && bitmap.Type == BitmapType.Text)
                    {
                        bitmap.IsHide = true;
                        TextBitmapClicked?.Invoke(bitmap);
                    }
                    bitmap.TouchAction = null;

                    if (rectTrash.Contains(point))
                    {
                        bitmapCollection.Remove(bitmap);
                    }

                    InvalidateSurface();
                }
                break;
            }
        }