Ejemplo n.º 1
0
        private ICanvasImage CreateComposite()
        {
            var compositeEffect = new CompositeEffect {
                Mode = CanvasComposite.SourceOver
            };

            var transformEffects = new List <Transform3DEffect>();

            const int petalCount = 12;

            for (int i = 0; i < petalCount; i++)
            {
                var transformEffect = new Transform3DEffect
                {
                    Source = bitmapTiger
                };

                compositeEffect.Sources.Add(transformEffect);
                transformEffects.Add(transformEffect);
            }

            // Animation rotates each copy of the image at a different speed.
            animationFunction = elapsedTime =>
            {
                for (int i = 0; i < petalCount; i++)
                {
                    transformEffects[i].TransformMatrix = Matrix4x4.CreateRotationZ(elapsedTime * i / 3);
                }
            };

            currentEffectSize = Vector2.Zero;

            return(compositeEffect);
        }
Ejemplo n.º 2
0
        private ICanvasImage CreateBlend()
        {
            var rotatedTiger = new Transform3DEffect
            {
                Source = bitmapTiger
            };

            var blendEffect = new BlendEffect
            {
                Background = bitmapTiger,
                Foreground = rotatedTiger
            };

            // Animation swings the second copy of the image back and forth,
            // while cycling through the different blend modes.
            int enumValueCount = Utils.GetEnumAsList <BlendEffectMode>().Count;

            animationFunction = elapsedTime =>
            {
                blendEffect.Mode             = (BlendEffectMode)(elapsedTime / Math.PI % enumValueCount);
                textLabel                    = "Mode: " + blendEffect.Mode;
                rotatedTiger.TransformMatrix = Matrix4x4.CreateRotationZ((float)Math.Sin(elapsedTime));
            };

            return(blendEffect);
        }
Ejemplo n.º 3
0
        public void Transform3DEffectDoesNotSupportHighQualityInterpolation()
        {
            var effect = new Transform3DEffect();

            var supportedModes = from mode in Enum.GetValues(typeof(CanvasImageInterpolation)).Cast <CanvasImageInterpolation>()
                                 where mode != CanvasImageInterpolation.HighQualityCubic
                                 select mode;

            foreach (var interpolationMode in supportedModes)
            {
                effect.InterpolationMode = interpolationMode;
                Assert.AreEqual(interpolationMode, effect.InterpolationMode);
            }

            Assert.ThrowsException <ArgumentException>(() =>
            {
                effect.InterpolationMode = CanvasImageInterpolation.HighQualityCubic;
            });
        }
Ejemplo n.º 4
0
        private ICanvasImage CreateTransform3D()
        {
            var transformEffect = new Transform3DEffect
            {
                Source = bitmapTiger
            };

            // Animation rotates the bitmap in 3D space.
            animationFunction = elapsedTime =>
            {
                transformEffect.TransformMatrix = Matrix4x4.CreateFromYawPitchRoll(elapsedTime / 3,
                                                                                   elapsedTime / 7,
                                                                                   elapsedTime * 5);
            };

            currentEffectSize = Vector2.Zero;

            return(transformEffect);
        }
Ejemplo n.º 5
0
        private ICanvasImage CreateTransform3D()
        {
            var transformEffect = new Transform3DEffect
            {
                Source = bitmapTiger
            };

            // Animation rotates the bitmap in 3D space.
            animationFunction = elapsedTime =>
            {
                transformEffect.TransformMatrix = Matrix4x4.CreateFromYawPitchRoll(elapsedTime / 3,
                                                                                   elapsedTime / 7,
                                                                                   elapsedTime * 5);
            };

            currentEffectSize = Vector2.Zero;

            return transformEffect;
        }
Ejemplo n.º 6
0
        private ICanvasImage CreateComposite()
        {
            var compositeEffect = new CompositeEffect { Mode = CanvasComposite.SourceOver };

            var transformEffects = new List<Transform3DEffect>();

            const int petalCount = 12;

            for (int i = 0; i < petalCount; i++)
            {
                var transformEffect = new Transform3DEffect
                {
                    Source = bitmapTiger
                };

                compositeEffect.Sources.Add(transformEffect);
                transformEffects.Add(transformEffect);
            }

            // Animation rotates each copy of the image at a different speed.
            animationFunction = elapsedTime =>
            {
                for (int i = 0; i < petalCount; i++)
                {
                    transformEffects[i].TransformMatrix = Matrix4x4.CreateRotationZ(elapsedTime * i / 3);
                }
            };

            currentEffectSize = Vector2.Zero;

            return compositeEffect;
        }
Ejemplo n.º 7
0
        private ICanvasImage CreateBlend()
        {
            var rotatedTiger = new Transform3DEffect
            {
                Source = bitmapTiger
            };

            var blendEffect = new BlendEffect
            {
                Background = bitmapTiger,
                Foreground = rotatedTiger
            };

            // Animation swings the second copy of the image back and forth,
            // while cycling through the different blend modes.
            int enumValueCount = Utils.GetEnumAsList<BlendEffectMode>().Count;

            animationFunction = elapsedTime =>
            {
                blendEffect.Mode = (BlendEffectMode)(elapsedTime / Math.PI % enumValueCount);
                textLabel = "Mode: " + blendEffect.Mode;
                rotatedTiger.TransformMatrix = Matrix4x4.CreateRotationZ((float)Math.Sin(elapsedTime));
            };

            return blendEffect;
        }
Ejemplo n.º 8
0
        void DrawStuff(CanvasDrawingSession ds)
        {
            int         horizontalLimit  = (int)m_canvasControl.ActualWidth;
            int         verticalLimit    = (int)m_canvasControl.ActualHeight;
            const float thickStrokeWidth = 80.0f;

            DrawnContentType drawnContentType = (DrawnContentType)m_drawnContentTypeCombo.SelectedValue;

            ds.Clear(NextRandomColor());

            Rect    rect;
            Vector2 point;
            float   radiusX;
            float   radiusY;

            Random random = new Random();

            switch (drawnContentType)
            {
            case DrawnContentType.Clear_Only:
                break;

            case DrawnContentType.Bitmap:
                if (m_bitmap_tiger != null)
                {
                    ds.DrawImage(m_bitmap_tiger, NextRandomPoint(horizontalLimit, verticalLimit).ToVector2());
                }
                else
                {
                    DrawNoBitmapErrorMessage(ds, horizontalLimit / 2, verticalLimit / 2);
                }
                break;

            case DrawnContentType.Effect_GaussianBlur:
                if (m_bitmap_tiger != null)
                {
                    GaussianBlurEffect blurEffect = new GaussianBlurEffect();
                    blurEffect.StandardDeviation = (float)random.NextDouble() * 5;
                    blurEffect.Source            = m_bitmap_tiger;
                    ds.DrawImage(blurEffect, new Vector2(horizontalLimit / 2, verticalLimit / 2));
                }
                else
                {
                    DrawNoBitmapErrorMessage(ds, horizontalLimit / 2, verticalLimit / 2);
                }
                break;

            case DrawnContentType.Effect_Saturation:
                if (m_bitmap_tiger != null)
                {
                    SaturationEffect saturationEffect = new SaturationEffect();
                    saturationEffect.Saturation = (float)random.NextDouble();
                    saturationEffect.Source     = m_bitmap_tiger;
                    ds.DrawImage(saturationEffect, new Vector2(horizontalLimit / 2, verticalLimit / 2));
                }
                else
                {
                    DrawNoBitmapErrorMessage(ds, horizontalLimit / 2, verticalLimit / 2);
                }
                break;

            case DrawnContentType.Effect_3DTransform:
                if (m_bitmap_tiger != null)
                {
                    Transform3DEffect transformEffect = new Transform3DEffect();
                    transformEffect.Source            = m_bitmap_tiger;
                    transformEffect.InterpolationMode = CanvasImageInterpolation.Cubic;
                    transformEffect.TransformMatrix   = Matrix4x4.CreateRotationZ((float)random.NextDouble(), new Vector3(0, 0, 0));
                    ds.DrawImage(transformEffect, new Vector2(horizontalLimit / 2, verticalLimit / 2));
                }
                else
                {
                    DrawNoBitmapErrorMessage(ds, horizontalLimit / 2, verticalLimit / 2);
                }
                break;

            case DrawnContentType.Effect_Blend:
                if (m_bitmap_tiger != null)
                {
                    Transform3DEffect transformEffect = new Transform3DEffect();
                    transformEffect.Source          = m_bitmap_tiger;
                    transformEffect.TransformMatrix = Matrix4x4.CreateRotationZ((float)random.NextDouble(), new Vector3(0, 0, 0));
                    BlendEffect blendEffect = new BlendEffect();
                    blendEffect.Background = m_bitmap_tiger;
                    blendEffect.Foreground = transformEffect;
                    blendEffect.Mode       = BlendEffectMode.SoftLight;
                    ds.DrawImage(blendEffect, new Vector2(horizontalLimit / 2, verticalLimit / 2));
                }
                else
                {
                    DrawNoBitmapErrorMessage(ds, horizontalLimit / 2, verticalLimit / 2);
                }
                break;

            case DrawnContentType.Effect_Composite:
                if (m_bitmap_tiger != null)
                {
                    CompositeEffect compositeEffect = new CompositeEffect();
                    compositeEffect.Mode = CompositeEffectMode.SourceOver;

                    float angle       = 0.0f;
                    float angleDelta  = (float)random.NextDouble() + 0.05f;
                    int   imageNumber = (int)(2 * Math.PI / angleDelta) + 1;
                    foreach (var i in Enumerable.Range(0, imageNumber))
                    {
                        Transform3DEffect transformEffect = new Transform3DEffect();
                        transformEffect.Source          = m_bitmap_tiger;
                        transformEffect.TransformMatrix = Matrix4x4.CreateRotationZ(angle, new Vector3(0, 0, 0));
                        angle += angleDelta;
                        compositeEffect.Inputs.Add(transformEffect);
                    }
                    ds.DrawImage(compositeEffect, new Vector2(horizontalLimit / 2, verticalLimit / 2));
                }
                else
                {
                    DrawNoBitmapErrorMessage(ds, horizontalLimit / 2, verticalLimit / 2);
                }
                break;

            case DrawnContentType.Line_Thin:
                ds.DrawLine(
                    NextRandomPoint(horizontalLimit, verticalLimit).ToVector2(),
                    NextRandomPoint(horizontalLimit, verticalLimit).ToVector2(),
                    NextRandomColor());
                break;

            case DrawnContentType.Line_Thick:
                ds.DrawLine(
                    NextRandomPoint(horizontalLimit, verticalLimit).ToVector2(),
                    NextRandomPoint(horizontalLimit, verticalLimit).ToVector2(),
                    NextRandomColor(),
                    thickStrokeWidth);
                break;

            case DrawnContentType.Rectangle_Thin:
                ds.DrawRectangle(
                    NextRandomRect(horizontalLimit, verticalLimit),
                    NextRandomColor());
                break;

            case DrawnContentType.Rectangle_Thick:
                ds.DrawRectangle(
                    NextRandomRect(horizontalLimit, verticalLimit),
                    NextRandomColor(),
                    thickStrokeWidth);
                break;

            case DrawnContentType.Rectangle_Filled:
                ds.FillRectangle(
                    NextRandomRect(horizontalLimit, verticalLimit),
                    NextRandomColor());
                break;

            case DrawnContentType.RoundedRectangle_Thin:
                NextRandomRoundedRect(horizontalLimit, verticalLimit, out rect, out radiusX, out radiusY);
                ds.DrawRoundedRectangle(
                    rect, radiusX, radiusY,
                    NextRandomColor());
                break;

            case DrawnContentType.RoundedRectangle_Thick:
                NextRandomRoundedRect(horizontalLimit, verticalLimit, out rect, out radiusX, out radiusY);
                ds.DrawRoundedRectangle(
                    rect, radiusX, radiusY,
                    NextRandomColor(),
                    thickStrokeWidth);
                break;

            case DrawnContentType.Ellipse_Thin:
                NextRandomEllipse(horizontalLimit, verticalLimit, out point, out radiusX, out radiusY);
                ds.DrawEllipse(
                    point, radiusX, radiusY,
                    NextRandomColor());
                break;

            case DrawnContentType.Ellipse_Thick:
                NextRandomEllipse(horizontalLimit, verticalLimit, out point, out radiusX, out radiusY);
                ds.DrawEllipse(
                    point, radiusX, radiusY,
                    NextRandomColor(),
                    thickStrokeWidth);
                break;

            case DrawnContentType.Ellipse_Fill:
                NextRandomEllipse(horizontalLimit, verticalLimit, out point, out radiusX, out radiusY);
                ds.FillEllipse(
                    point, radiusX, radiusY,
                    NextRandomColor());
                break;

            case DrawnContentType.Circle_Fill:
                ds.FillCircle(
                    NextRandomPoint(horizontalLimit, verticalLimit).ToVector2(),
                    100,
                    NextRandomColor());
                break;

            case DrawnContentType.Dashed_Lines:
                DrawDashedLines(ds, NextRandomColor(), horizontalLimit, verticalLimit);
                break;

            case DrawnContentType.Text:
                var p     = NextRandomPoint(horizontalLimit, verticalLimit);
                var x     = (float)p.X;
                var y     = (float)p.Y;
                var color = NextRandomColor();
                ds.DrawLine(new Vector2(x, 0), new Vector2(x, verticalLimit), color);
                ds.DrawLine(new Vector2(0, y), new Vector2(horizontalLimit, y), color);
                ds.DrawText(
                    "Centered",
                    p.ToVector2(),
                    color,
                    new CanvasTextFormat()
                {
                    FontSize           = 18,
                    VerticalAlignment  = CanvasVerticalAlignment.Center,
                    ParagraphAlignment = ParagraphAlignment.Center
                });

                var r = NextRandomRect(horizontalLimit, verticalLimit);
                ds.DrawRectangle(r, color);
                ds.DrawText(
                    m_quiteLongText,
                    r,
                    NextRandomColor(),
                    new CanvasTextFormat()
                {
                    FontFamily         = "Comic Sans MS",
                    FontSize           = 18,
                    ParagraphAlignment = ParagraphAlignment.Justify,
                    Options            = CanvasDrawTextOptions.Clip
                });
                break;

            case DrawnContentType.ImageBrush:
                if (m_bitmap_tiger != null)
                {
                    m_imageBrush.Image   = m_bitmap_tiger;
                    m_imageBrush.ExtendX = (CanvasEdgeBehavior)(m_random.Next(3));
                    m_imageBrush.ExtendY = (CanvasEdgeBehavior)(m_random.Next(3));
                    ds.FillRectangle(new Rect(0, 0, horizontalLimit, verticalLimit), m_imageBrush);
                }
                else
                {
                    DrawNoBitmapErrorMessage(ds, horizontalLimit / 2, verticalLimit / 2);
                }
                break;


            case DrawnContentType.OffscreenTarget:
                m_imageBrush.Image   = m_offscreenTarget;
                m_imageBrush.ExtendX = (CanvasEdgeBehavior)(m_random.Next(3));
                m_imageBrush.ExtendY = (CanvasEdgeBehavior)(m_random.Next(3));
                ds.FillRectangle(new Rect(0, 0, horizontalLimit, verticalLimit), m_imageBrush);
                break;

            case DrawnContentType.Test_Scene0_Default:
                GeometryTestScene0.DrawGeometryTestScene(ds, TestSceneRenderingType.Default);
                break;

            case DrawnContentType.Test_Scene0_Wireframe:
                GeometryTestScene0.DrawGeometryTestScene(ds, TestSceneRenderingType.Wireframe);
                break;

            case DrawnContentType.Test_Scene1_Default:
                GeometryTestScene1.DrawGeometryTestScene(ds, TestSceneRenderingType.Default);
                break;

            case DrawnContentType.Test_Scene1_Randomized:
                GeometryTestScene1.DrawGeometryTestScene(ds, TestSceneRenderingType.Randomized);
                break;

            case DrawnContentType.Test_Scene1_Wireframe:
                GeometryTestScene1.DrawGeometryTestScene(ds, TestSceneRenderingType.Wireframe);
                break;

            default:
                System.Diagnostics.Debug.Assert(false);     // Unexpected
                break;
            }
        }
Ejemplo n.º 9
0
        private void Canvas_Draw(CanvasControl sender, CanvasDrawEventArgs args)
        {
            var ds = args.DrawingSession;

            ds.Clear(Color.FromArgb(0, 0, 0, 0));

            if (!isLoaded)
            {
                return;
            }

            Vector2 center = new Vector2();

            center.X = (float)(sender.ActualWidth - bitmapTiger.Size.Width) / 2;
            center.Y = (float)(sender.ActualHeight - bitmapTiger.Size.Height) / 2;

            ICanvasImage effect = null;

            switch (CurrentEffect)
            {
            case EffectType.None:
            {
                effect = bitmapTiger;
                break;
            }

            case EffectType.GaussianBlur:
            {
                effect = new GaussianBlurEffect()
                {
                    Source            = bitmapTiger,
                    StandardDeviation = 2.0f
                };
                break;
            }

            case EffectType.Saturation:
                effect = new SaturationEffect()
                {
                    Saturation = 0.2f,
                    Source     = bitmapTiger
                };
                break;

            case EffectType.Transform3D:
            {
                effect = new Transform3DEffect()
                {
                    Source          = bitmapTiger,
                    TransformMatrix = Matrix4x4.CreateRotationZ(0.5f, new Vector3(0, 0, 0))
                };
                break;
            }

            case EffectType.Blend:
            {
                Transform3DEffect transformEffect = new Transform3DEffect()
                {
                    Source          = bitmapTiger,
                    TransformMatrix = Matrix4x4.CreateRotationZ(0.5f, new Vector3(0, 0, 0))
                };
                effect = new BlendEffect()
                {
                    Background = bitmapTiger,
                    Foreground = transformEffect,
                    Mode       = BlendEffectMode.SoftLight
                };
                break;
            }

            case EffectType.Composite:
            {
                CompositeEffect compositeEffect = new CompositeEffect();
                compositeEffect.Mode = CompositeEffectMode.SourceOver;

                float angle       = 0.0f;
                float angleDelta  = 0.5f;
                int   imageNumber = (int)(2 * Math.PI / angleDelta) + 1;
                foreach (var i in Enumerable.Range(0, imageNumber))
                {
                    Transform3DEffect nextTransformEffect = new Transform3DEffect();
                    nextTransformEffect.Source          = bitmapTiger;
                    nextTransformEffect.TransformMatrix = Matrix4x4.CreateRotationZ(angle, new Vector3(0, 0, 0));
                    angle += angleDelta;
                    compositeEffect.Inputs.Add(nextTransformEffect);
                }
                Matrix4x4 translationMatrix = Matrix4x4.CreateTranslation((float)bitmapTiger.Size.Width / 2,
                                                                          (float)bitmapTiger.Size.Height / 2,
                                                                          0.0f);
                // Move composite effect so it appear on the screen center
                effect = new Transform3DEffect()
                {
                    Source          = compositeEffect,
                    TransformMatrix = translationMatrix
                };
                break;
            }
            }

            ds.DrawImage(effect, center);
        }