Ejemplo n.º 1
0
        public IRenderResult Render(IRenderSpecification specification, IDrawingContext context, CancellationToken cancellationToken)
        {
            var shadingSpecification = (ShadingOnlyRenderSpecification)specification;
            var fractalPart          = shadingSpecification.CalculatedFractalPart;

            using (var fastBitmap = this.renderer.CreateBitmap(fractalPart, specification.Settings, specification.Shader))
            {
                var scalableFractalPart = fractalPart as ScalableFractalPart;
                if (scalableFractalPart != null && !scalableFractalPart.ScaledScreenPosition.Equals(scalableFractalPart.ScreenPosition))
                {
                    var targetRect = new Rectangle(
                        scalableFractalPart.ScaledScreenPosition.Left,
                        scalableFractalPart.ScaledScreenPosition.Top,
                        scalableFractalPart.ScaledScreenPosition.Right - scalableFractalPart.ScaledScreenPosition.Left + 1,
                        scalableFractalPart.ScaledScreenPosition.Bottom - scalableFractalPart.ScaledScreenPosition.Top + 1);

                    context.DrawBitmap(fastBitmap.Bitmap, targetRect);
                }
                else
                {
                    var targetPoint = new Point(fractalPart.ScreenPosition.Left, fractalPart.ScreenPosition.Top);
                    context.DrawBitmapUnscaled(fastBitmap.Bitmap, targetPoint);
                }
            }

            return(new RenderResult(shadingSpecification.CalculatedFractalPart));
        }