Beispiel #1
0
 //边界方法
 public static ICanvasImage GetChromaKey(ICanvasImage canvasImage, CanvasEdgeBehavior ExtendX, CanvasEdgeBehavior ExtendY)
 {
     return(new BorderEffect
     {
         Source = canvasImage,
         ExtendX = ExtendX,
         ExtendY = ExtendY,
     });
 }
Beispiel #2
0
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="capture">Capture object</param>
 public LinearGradientBrushElement(Capture capture)
 {
     // Set the default values
     _startPoint      = Vector2.Zero;
     _endPoint        = Vector2.Zero;
     _opacity         = 1f;
     _alphaMode       = (CanvasAlphaMode)0;
     _bufferPrecision = (CanvasBufferPrecision)0;
     _edgeBehavior    = (CanvasEdgeBehavior)0;
     // Default ColorSpace is sRGB
     _preInterpolationColorSpace  = CanvasColorSpace.Srgb;
     _postInterpolationColorSpace = CanvasColorSpace.Srgb;
     _gradientStops = new List <CanvasGradientStop>();
     // Initialize
     Initialize(capture);
 }
Beispiel #3
0
        public static UGEdgeBehavior ToUGEdgeBehavior(this CanvasEdgeBehavior edgeBehavior)
        {
            switch (edgeBehavior)
            {
            case CanvasEdgeBehavior.Clamp:
                return(UGEdgeBehavior.Clamp);

            case CanvasEdgeBehavior.Wrap:
                return(UGEdgeBehavior.Wrap);

            case CanvasEdgeBehavior.Mirror:
                return(UGEdgeBehavior.Mirror);

            default:
                throw new NotSupportedException();
            }
        }
Beispiel #4
0
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="capture">Capture object</param>
 public RadialGradientHdrBrushElement(Capture capture)
 {
     // Set the default values
     _radiusX         = 0f;
     _radiusY         = 0f;
     _center          = Vector2.Zero;
     _originOffset    = Vector2.Zero;
     _opacity         = 1f;
     _alphaMode       = (CanvasAlphaMode)0;
     _bufferPrecision = (CanvasBufferPrecision)0;
     _edgeBehavior    = (CanvasEdgeBehavior)0;
     // Default ColorSpace is sRGB
     _preInterpolationColorSpace  = CanvasColorSpace.Srgb;
     _postInterpolationColorSpace = CanvasColorSpace.Srgb;
     _gradientStopHdrs            = new List <CanvasGradientStopHdr>();
     // Initialize
     Initialize(capture);
 }
Beispiel #5
0
        async void ConvertBrush(ICanvasResourceCreator resourceCreator, Brush xamBrush, BrushWrapper brushWrapper)
        {
            if (xamBrush == null)
            {
                brushWrapper.Brush = null;
            }

            else if (xamBrush is SolidColorBrush)
            {
                brushWrapper.Brush = new CanvasSolidColorBrush(resourceCreator, ConvertColor((xamBrush as SolidColorBrush).Color));
            }
            else if (xamBrush is LinearGradientBrush)
            {
                LinearGradientBrush  xamGradient   = xamBrush as LinearGradientBrush;
                CanvasGradientStop[] gradientStops = new CanvasGradientStop[xamGradient.GradientStops.Count];

                for (int i = 0; i < xamGradient.GradientStops.Count; i++)
                {
                    gradientStops[i] = new CanvasGradientStop
                    {
                        Position = (float)xamGradient.GradientStops[i].Offset,
                        Color    = ConvertColor(xamGradient.GradientStops[i].Color)
                    };
                }

                // enumeration values of 0, 1, 2 translated to 0, 2, 1
                CanvasEdgeBehavior edgeBehavior = (CanvasEdgeBehavior)((3 - (int)xamGradient.SpreadMethod) % 3);

                CanvasLinearGradientBrush winGradient = new CanvasLinearGradientBrush(resourceCreator,
                                                                                      gradientStops,
                                                                                      edgeBehavior,
                                                                                      CanvasAlphaMode.Straight);

                // TODO: Opacity and Transform

                brushWrapper.Brush      = winGradient;
                brushWrapper.StartPoint = ConvertPoint(xamGradient.StartPoint);
                brushWrapper.EndPoint   = ConvertPoint(xamGradient.EndPoint);
            }
            else if (xamBrush is ImageBrush)
            {
                ImageBrush xamImageBrush = (ImageBrush)xamBrush;

                CanvasImageBrush imageBrush = new CanvasImageBrush(resourceCreator);
                imageBrush.ExtendX  = CanvasEdgeBehavior.Wrap;
                imageBrush.ExtendY  = CanvasEdgeBehavior.Wrap;
                brushWrapper.Brush  = imageBrush;
                brushWrapper.Bitmap = null;

                // TODO: Perhaps a few try and catch blocks would be appropriate here. You know. Just in case.

                if (xamImageBrush.ImageSource != null)
                {
                    CanvasBitmap bitmap = null;

                    if (xamImageBrush.ImageSource is UriImageSource)
                    {
                        bitmap = await CanvasBitmap.LoadAsync(resourceCreator, ((UriImageSource)xamImageBrush.ImageSource).Uri.ToString());
                    }
                    else if (xamImageBrush.ImageSource is StreamImageSource)
                    {
                        StreamImageSource streamSource = (StreamImageSource)xamImageBrush.ImageSource;
                        var func = ((StreamImageSource)xamImageBrush.ImageSource).Stream;

                        Task <Stream> task = func(new CancellationToken());

                        // TODO: Is this OK if it's not awaited?
                        // Otherwise we have a problem because the resourceCreator must be valid in the next step
                        Stream stream = task.Result;

                        bitmap = await CanvasBitmap.LoadAsync(resourceCreator, stream.AsRandomAccessStream());
                    }
                    else if (xamImageBrush.ImageSource is FileImageSource)
                    {
                        FileImageSource fileSource = (FileImageSource)xamImageBrush.ImageSource;
                        bitmap = await CanvasBitmap.LoadAsync(resourceCreator, fileSource.File);
                    }

                    brushWrapper.Bitmap = bitmap;
                    CanvasControl.Invalidate();
                }
            }
        }