Exemplo n.º 1
0
        ICanvasImage CreateCheckerBoard(CanvasControl control)
        {
            var color1 = Color.FromArgb(255, 254, 254, 254);
            var color2 = Color.FromArgb(255, 250, 250, 250);

            Color[] twoByTwoChecker =
            {
                color1, color2,
                color2, color1
            };

            var checker = new DpiCompensationEffect
            {
                Source = new ScaleEffect
                {
                    Source = new BorderEffect
                    {
                        Source  = CanvasBitmap.CreateFromColors(control, twoByTwoChecker, 2, 2),
                        ExtendX = CanvasEdgeBehavior.Wrap,
                        ExtendY = CanvasEdgeBehavior.Wrap
                    },
                    Scale             = new Vector2(8, 8),
                    InterpolationMode = CanvasImageInterpolation.NearestNeighbor
                }
            };

            return(checker);
        }
Exemplo n.º 2
0
        static CanvasBitmap CreateTestBitmap(ICanvasResourceCreatorWithDpi resourceCreator, float dpi)
        {
            int pixelSize = (int)Math.Round(testSize * dpi / defaultDpi);

            // Initialize to solid gray.
            Color[] colors = Enumerable.Repeat(Colors.Gray, pixelSize * pixelSize).ToArray();

            // Diagonal lines.
            for (int i = 0; i < pixelSize; i++)
            {
                colors[i * pixelSize + i] = Colors.Red;
                colors[i * pixelSize + (pixelSize - i - 1)] = Colors.Red;
            }

            // Single pixel border.
            for (int i = 0; i < pixelSize; i++)
            {
                colors[i]             = Colors.Blue;
                colors[i * pixelSize] = Colors.Blue;
                colors[i * pixelSize + pixelSize - 1]   = Colors.Blue;
                colors[pixelSize * (pixelSize - 1) + i] = Colors.Blue;
            }

            if (dpi == defaultDpi)
            {
                // We could always just use the "else" path, but want to test this default overload as well.
                return(CanvasBitmap.CreateFromColors(resourceCreator, colors, pixelSize, pixelSize));
            }
            else
            {
                return(CanvasBitmap.CreateFromColors(resourceCreator, colors, pixelSize, pixelSize, dpi));
            }
        }
Exemplo n.º 3
0
        public void CanvasBitmap_CreateFromSoftwareBitmap_Roundtrip()
        {
            var colors = new Color[]
            {
                Colors.Red, Colors.Green, Colors.Yellow,
                Colors.Green, Colors.Yellow, Colors.Red,
                Colors.Yellow, Colors.Red, Colors.Green
            };

            float anyDpi = 10;

            var device = new CanvasDevice(true);

            var originalBitmap = CanvasBitmap.CreateFromColors(device, colors, 3, 3, anyDpi);

            var softwareBitmap = SoftwareBitmap.CreateCopyFromSurfaceAsync(originalBitmap, BitmapAlphaMode.Premultiplied).AsTask().Result;

            softwareBitmap.DpiX = anyDpi;
            softwareBitmap.DpiY = anyDpi;

            var roundtrippedBitmap = CanvasBitmap.CreateFromSoftwareBitmap(device, softwareBitmap);

            Assert.AreEqual(originalBitmap.Format, roundtrippedBitmap.Format);
            Assert.AreEqual(anyDpi, roundtrippedBitmap.Dpi);

            var roundtrippedColors = roundtrippedBitmap.GetPixelColors();

            Assert.AreEqual(colors.Length, roundtrippedColors.Length);
            for (var i = 0; i < colors.Length; ++i)
            {
                Assert.AreEqual(colors[i], roundtrippedColors[i]);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Dropws the shadow_ draw.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The <see cref="Microsoft.Graphics.Canvas.UI.Xaml.CanvasDrawEventArgs" /> instance containing the event data.</param>
        protected void DropShadow_Draw(CanvasControl sender, CanvasDrawEventArgs args)
        {
            Color[] colors = new Color[(int)(sender.Size.Width * sender.Size.Height)];
            for (int x = 0; x < sender.ActualWidth; x++)
            {
                if (x < sender.ActualWidth)
                {
                    colors[x] = Colors.{ ThemeResource SystemControlForegroundChromeHighBrush };
                }
            }

            using (CanvasBitmap bitmap = CanvasBitmap.CreateFromColors(sender, colors, (int)sender.Size.Width, (int)sender.Size.Height))
            {
                using (ShadowEffect shadow = new ShadowEffect())
                {
                    shadow.Source       = bitmap;
                    shadow.BlurAmount   = 3;
                    shadow.Optimization = EffectOptimization.Speed;

                    args.DrawingSession.DrawImage(shadow);
                }
            }
        }
#endif
    }
Exemplo n.º 5
0
        public void CanvasImage_ComputeHistogram()
        {
            Color[] colors =
            {
                Colors.Red,  Colors.Lime,
                Colors.Blue, Colors.White
            };

            var device = new CanvasDevice();
            var bitmap = CanvasBitmap.CreateFromColors(device, colors, 2, 2);

            // Histogram over the entire 2x2 bitmap (covering red, green, blue, and white pixels).
            TestHistogram(bitmap, new Rect(0, 0, 2, 2), EffectChannelSelect.Red, 0.5f, 0.5f);
            TestHistogram(bitmap, new Rect(0, 0, 2, 2), EffectChannelSelect.Green, 0.5f, 0.5f);
            TestHistogram(bitmap, new Rect(0, 0, 2, 2), EffectChannelSelect.Blue, 0.5f, 0.5f);

            // Histogram of just the top left 1x1 (single red pixel).
            TestHistogram(bitmap, new Rect(0, 0, 1, 1), EffectChannelSelect.Red, 0, 1);
            TestHistogram(bitmap, new Rect(0, 0, 1, 1), EffectChannelSelect.Green, 1, 0);
            TestHistogram(bitmap, new Rect(0, 0, 1, 1), EffectChannelSelect.Blue, 1, 0);

            // Histogram of the top right 1x1 (single green pixel).
            TestHistogram(bitmap, new Rect(1, 0, 1, 1), EffectChannelSelect.Red, 1, 0);
            TestHistogram(bitmap, new Rect(1, 0, 1, 1), EffectChannelSelect.Green, 0, 1);
            TestHistogram(bitmap, new Rect(1, 0, 1, 1), EffectChannelSelect.Blue, 1, 0);

            // Histogram of the bottom row (blue and white pixels).
            TestHistogram(bitmap, new Rect(0, 1, 2, 1), EffectChannelSelect.Red, 0.5f, 0.5f);
            TestHistogram(bitmap, new Rect(0, 1, 2, 1), EffectChannelSelect.Green, 0.5f, 0.5f);
            TestHistogram(bitmap, new Rect(0, 1, 2, 1), EffectChannelSelect.Blue, 0, 1);
        }
Exemplo n.º 6
0
 //创建灰白网格底图
 public static ICanvasImage GrayWhite(ICanvasResourceCreator crc, int width, int height)
 {
     return(new CropEffect                  //裁切成画布大小
     {
         Source = new DpiCompensationEffect //根据DPI适配
         {
             Source = new ScaleEffect       //缩放
             {
                 Source = new BorderEffect  //无限延伸图片
                 {
                     Source = CanvasBitmap.CreateFromColors(crc, new
                                                            Color[] //从数组创建2x2图片
                     {
                         Color.FromArgb(255, 233, 233, 233), Colors.White,
                         Colors.White, Color.FromArgb(255, 233, 233, 233),
                     }, 2, 2),
                     ExtendX = CanvasEdgeBehavior.Wrap,
                     ExtendY = CanvasEdgeBehavior.Wrap
                 },
                 Scale = new Vector2(8, 8),
                 InterpolationMode = CanvasImageInterpolation.NearestNeighbor
             }
         },
         SourceRectangle = new Rect(0, 0, App.Model.Width, App.Model.Height),
     });
 }
Exemplo n.º 7
0
        private void FillCanvas(CanvasRenderTarget canvas, object drawLock, Vector2 position)
        {
            // This seems pretty hacky... maybe dpi should be handled in the layer above the tools
            position *= (GraphicsInformation.Dpi / 96.0f);

            lock (drawLock)
            {
                var canvasSize = canvas.SizeInPixels.ToVector2();
                var colors     = canvas.GetPixelColors();
                var rect       = new Rect(0, 0, canvas.SizeInPixels.Width, canvas.SizeInPixels.Height);

                if ((position.X >= rect.Left && position.X <= rect.Right) ||
                    (position.Y >= rect.Top && position.Y <= rect.Bottom))
                {
                    var targetColor = colors[(int)(position.X + position.Y * canvasSize.X)];

                    if (targetColor != _color)
                    {
                        FloodPixel((int)position.X, (int)position.Y, colors, targetColor, canvasSize, rect);

                        using (var bitmap = CanvasBitmap.CreateFromColors(_device, colors, (int)canvas.SizeInPixels.Width, (int)canvas.SizeInPixels.Height, GraphicsInformation.Dpi))
                            using (var drawingSession = canvas.CreateDrawingSession())
                                using (var layer = drawingSession.CreateLayer(1.0f, rect))
                                {
                                    drawingSession.DrawImage(bitmap);
                                }
                    }
                }
            }
        }
Exemplo n.º 8
0
        private ICanvasImage CreateChromaKey()
        {
            textLabel = requiresWin10;

            var chromaKeyEffect = new ChromaKeyEffect
            {
                Source  = bitmapTiger,
                Color   = Color.FromArgb(255, 162, 125, 73),
                Feather = true
            };

            // Composite the chromakeyed image on top of a background checker pattern.
            Color[] twoByTwoChecker =
            {
                Colors.LightGray, Colors.DarkGray,
                Colors.DarkGray,  Colors.LightGray,
            };

            var compositeEffect = new CompositeEffect
            {
                Sources =
                {
                    // Create the checkered background by scaling up a tiled 2x2 bitmap.
                    new CropEffect
                    {
                        Source = new DpiCompensationEffect
                        {
                            Source = new ScaleEffect
                            {
                                Source = new BorderEffect
                                {
                                    Source  = CanvasBitmap.CreateFromColors(canvas, twoByTwoChecker, 2, 2),
                                    ExtendX = CanvasEdgeBehavior.Wrap,
                                    ExtendY = CanvasEdgeBehavior.Wrap
                                },
                                Scale             = new Vector2(8, 8),
                                InterpolationMode = CanvasImageInterpolation.NearestNeighbor
                            }
                        },
                        SourceRectangle = bitmapTiger.Bounds
                    },

                    // Composite the chromakey result on top of the background.
                    chromaKeyEffect
                }
            };

            // Animation changes the chromakey matching tolerance.
            animationFunction = elapsedTime =>
            {
                chromaKeyEffect.Tolerance = 0.1f + (float)Math.Sin(elapsedTime) * 0.1f;
            };

            return(compositeEffect);
        }
Exemplo n.º 9
0
        private CanvasBitmap CreateEmptyBitmap(int width, int height, CanvasControl canvasControl = null)
        {
            canvasControl = canvasControl ?? this.canvas;
            var colors = new Color[width * height];

            for (int i = 0; i < colors.Length; i++)
            {
                colors[i] = canvasControl.ClearColor;
            }
            var bitmap = CanvasBitmap.CreateFromColors(canvasControl, colors, width, height);

            return(bitmap);
        }
Exemplo n.º 10
0
        private void canvasControl_CreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args)
        {
            modeInstance = null;

            args.TrackAsyncAction(canvasControl_CreateResourcesAsync(sender).AsAsyncAction());

            var checks = CanvasBitmap.CreateFromColors(sender, new Color[] { Colors.Gray, Colors.Black, Colors.Black, Colors.Gray }, 2, 2);

            checkedFillPattern = new CanvasImageBrush(sender, checks)
            {
                ExtendX       = CanvasEdgeBehavior.Wrap,
                ExtendY       = CanvasEdgeBehavior.Wrap,
                Transform     = Matrix3x2.CreateScale(16),
                Interpolation = CanvasImageInterpolation.NearestNeighbor
            };
        }
Exemplo n.º 11
0
        public void SetPixelColorsReadHazards()
        {
            var device       = new CanvasDevice();
            var bitmap       = CanvasBitmap.CreateFromColors(device, new Color[1], 1, 1);
            var renderTarget = new CanvasRenderTarget(device, 2, 1, 96);

            using (var ds = renderTarget.CreateDrawingSession())
            {
                bitmap.SetPixelColors(new Color[] { Colors.Blue });
                ds.DrawImage(bitmap, 0, 0);

                bitmap.SetPixelColors(new Color[] { Colors.Red });
                ds.DrawImage(bitmap, 1, 0);
            }

            CollectionAssert.AreEqual(new Color[] { Colors.Blue, Colors.Red }, renderTarget.GetPixelColors());
        }
Exemplo n.º 12
0
        public Task LoadTextures(CanvasAnimatedControl Canvas, TextureLoader Textures)
        {
            // ParaBg
            ResCreator = Canvas;

            Color MaskColor = LayoutSettings.MajorBackgroundColor;

            MaskColor.A = ( byte )Math.Floor(255 * 0.8);
            MaskBrush   = new CanvasSolidColorBrush(ResCreator, MaskColor);

            ReloadBackground();

            // RippleEx
            CoverBmp   = CanvasBitmap.CreateFromColors(Canvas, new Color[] { Colors.Transparent }, 1, 1);
            RingBrush  = new CanvasSolidColorBrush(Canvas, LayoutSettings.Shades90);
            TextBrush  = new CanvasSolidColorBrush(ResCreator, Colors.White);
            CoverBrush = new CanvasSolidColorBrush(Canvas, Colors.Transparent);

            UpdateText(Canvas);
            return(ReloadCover());
        }
Exemplo n.º 13
0
        async private void OnLoadBitmapAsyncClicked(object sender, RoutedEventArgs e)
        {
            string fileNameTiger = "imageTiger.jpg";

            m_bitmap_tiger = await CanvasBitmap.LoadAsync(m_canvasControl, fileNameTiger);

            m_bitmap_colorGrids = new CanvasBitmap[3];
            Uri uri = new Uri("ms-appx:///HighDpiGrid.png");

            m_bitmap_colorGrids[0] = await CanvasBitmap.LoadAsync(m_canvasControl, uri);

            byte[] imageBytes = new byte[]
            {
                0xFF, 0x0, 0x0, 0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF,
                0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
            };
            m_bitmap_colorGrids[1] = CanvasBitmap.CreateFromBytes( // Doesn't necessarily need to be async, but grouped here for organization.
                m_canvasControl,
                imageBytes,
                4,
                2,
                Microsoft.Graphics.Canvas.DirectX.DirectXPixelFormat.B8G8R8A8UIntNormalized,
                CanvasAlphaMode.Premultiplied);

            Color[] imageColors = new Color[]
            {
                Colors.Blue, Colors.Black, Colors.Black, Colors.Red,
                Colors.White, Colors.White, Colors.White, Colors.White
            };
            m_bitmap_colorGrids[2] = CanvasBitmap.CreateFromColors(
                m_canvasControl,
                imageColors,
                4,
                2,
                CanvasAlphaMode.Premultiplied);

            m_canvasControl.Invalidate();
        }
Exemplo n.º 14
0
        public void ProcessFrame(ProcessVideoFrameContext context)
        {
            var inputDirect3DSurface = context.InputFrame.Direct3DSurface;

            float anyDpi = 96.0f;
            var   width  = context.OutputFrame.Direct3DSurface.Description.Width;
            var   height = context.OutputFrame.Direct3DSurface.Description.Height;

            // Part 1: Apply effect using Imaging SDK
            CanvasRenderTarget renderTarget = new CanvasRenderTarget(canvasDevice, (float)width, (float)height, anyDpi);

            if (inputDirect3DSurface != null && renderTarget != null)
            {
                if (m_direct3DSurfaceImageSource == null)
                {
                    m_direct3DSurfaceImageSource = new Direct3DSurfaceImageSource();
                }

                m_direct3DSurfaceImageSource.Direct3DSurface = inputDirect3DSurface;
                ((IImageConsumer)m_grayScaleEffect).Source   = m_direct3DSurfaceImageSource;

                if (m_direct3DSurfaceRenderer == null)
                {
                    m_direct3DSurfaceRenderer = new Direct3DSurfaceRenderer();
                }

                m_direct3DSurfaceRenderer.Direct3DSurface = renderTarget;
                m_direct3DSurfaceRenderer.Source          = m_grayScaleEffect;

                var task = m_direct3DSurfaceRenderer.RenderAsync().AsTask();
                task.Wait();

                m_direct3DSurfaceRenderer.Direct3DSurface    = null;
                m_direct3DSurfaceImageSource.Direct3DSurface = null;
            }

            // Part 2: Apply another effect using Win2D
            var size   = context.OutputFrame.Direct3DSurface.Description.Width * context.OutputFrame.Direct3DSurface.Description.Height;
            var colors = Enumerable.Repeat(Colors.Black, size).ToArray();

            var inputBitmap = CanvasBitmap.CreateFromColors(canvasDevice, colors, width, height, anyDpi);

            inputBitmap.CopyPixelsFromBitmap(renderTarget);

            using (CanvasRenderTarget output = CanvasRenderTarget.CreateFromDirect3D11Surface(canvasDevice, context.OutputFrame.Direct3DSurface))
                using (CanvasDrawingSession ds = output.CreateDrawingSession())
                {
                    TimeSpan time = context.InputFrame.RelativeTime.HasValue ? context.InputFrame.RelativeTime.Value : new TimeSpan();

                    float dispX = (float)Math.Cos(time.TotalSeconds) * 75f;
                    float dispY = (float)Math.Sin(time.TotalSeconds) * 75f;

                    ds.Clear(Colors.Black);

                    var dispMap = new DisplacementMapEffect()
                    {
                        Source         = inputBitmap,
                        XChannelSelect = EffectChannelSelect.Red,
                        YChannelSelect = EffectChannelSelect.Green,
                        Amount         = 100f,
                        Displacement   = new Transform2DEffect()
                        {
                            TransformMatrix = Matrix3x2.CreateTranslation(dispX, dispY),
                            Source          = new BorderEffect()
                            {
                                ExtendX = CanvasEdgeBehavior.Mirror,
                                ExtendY = CanvasEdgeBehavior.Mirror,
                                Source  = new TurbulenceEffect()
                                {
                                    Octaves = 3
                                }
                            }
                        }
                    };

                    ds.DrawImage(dispMap, -25f, -25f);
                }

            ((IDisposable)renderTarget).Dispose();
            ((IDisposable)inputBitmap).Dispose();
        }
Exemplo n.º 15
0
        private void UpdateSpectrogramBitmaps()
        {
            var spectraCount = _spectrogram.Count;
            var spectrumSize = _spectrogram.First().Length;

            // ============ create 2D spectrogram bitmap ============

            var colors2D = new Color[spectraCount * spectrumSize];

            for (var i = 0; i < spectraCount; i++)
            {
                // ...flip rows bottom-to-top...
                var pos = (spectrumSize - 1) * spectraCount + i;

                for (var j = 0; j < spectrumSize; j++)
                {
                    colors2D[pos] = _cmap[_spectrogram[i][j]].ToUwpColor();

                    // ...flip rows bottom-to-top...
                    pos -= spectraCount;
                }
            }

            _spectrogram2D = CanvasBitmap.CreateFromColors(SpectrumView,
                                                           colors2D,
                                                           spectraCount,
                                                           spectrumSize);

            // ============ create 3D spectrogram bitmap ============

            const int width3D  = 700;
            const int height3D = 700;
            const int size3D   = width3D * height3D;

            var colors3D = Enumerable.Range(0, size3D)
                           .Select(i => _cmap.Colors().First().ToUwpColor())
                           .ToArray();

            for (var x = 0; x < spectraCount; x++)
            {
                for (var y = 0; y < spectrumSize; y++)
                {
                    var z = _spectrogram[x][y];

                    while (z > 0)
                    {
                        var coords = RotateY(x, y, z, AngleY);
                        coords = RotateX(coords[0], coords[1], coords[2], AngleX);
                        coords = RotateZ(coords[0], coords[1], coords[2], AngleZ);

                        if (coords[0] + CenterY < height3D && coords[1] + CenterX < width3D)
                        {
                            var pos = ((int)coords[0] + CenterY) * width3D +
                                      (int)coords[1] + CenterX;

                            colors3D[pos] = _cmap[z].ToUwpColor();
                        }

                        z -= Stride;
                    }
                }
            }

            _spectrogram3D = CanvasBitmap.CreateFromColors(SpectrumView3D,
                                                           colors3D,
                                                           height3D,
                                                           width3D);
            // redraw panels:

            SpectrumView.Invalidate();
            SpectrumView3D.Invalidate();
        }