//边界方法 public static ICanvasImage GetChromaKey(ICanvasImage canvasImage, CanvasEdgeBehavior ExtendX, CanvasEdgeBehavior ExtendY) { return(new BorderEffect { Source = canvasImage, ExtendX = ExtendX, ExtendY = ExtendY, }); }
/// <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); }
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(); } }
/// <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); }
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(); } } }