コード例 #1
0
ファイル: BitmapWriter.cs プロジェクト: BennyJ1982/Mandelbrot
        public FastBitmap CreateBitmap(CalculatedFractalPart calculatedFractalPart, IFractalSettings settings, IShader shader)
        {
            var fastBitmap = new FastBitmap(
                calculatedFractalPart.ScreenPosition.Right - calculatedFractalPart.ScreenPosition.Left + 1,
                calculatedFractalPart.ScreenPosition.Bottom - calculatedFractalPart.ScreenPosition.Top + 1);

            using (var lazyGraphics = new LazyGraphics(fastBitmap.Bitmap))
            {
                using (var pens = new PenCache())
                {
                    foreach (var path in calculatedFractalPart.Paths)
                    {
                        var color = shader.GetColor(path.Value, settings.MaxIterations);
                        DrawPath(path, color, fastBitmap, pens, lazyGraphics);
                    }
                }
            }

            return(fastBitmap);
        }
コード例 #2
0
ファイル: BitmapWriter.cs プロジェクト: BennyJ1982/Mandelbrot
        private static void DrawPath(FractalPath path, Color color, FastBitmap fastBitmap, PenCache pens, LazyGraphics lazyGraphics)
        {
            if (path.IsPixel)
            {
                var point = path.GetFirstPoint();
                fastBitmap.SetPixel((int)point.X, (int)point.Y, color);
                return;
            }

            var pen = pens.GetOrCreatePen(color);

            if (path.IsLine)
            {
                lazyGraphics.Value.DrawLine(pen, path.GetFirstPoint().ToDrawingPoint(), path.GetSecondPoint().ToDrawingPoint());
                return;
            }

            for (var i = 0; i < path.Points.Length - 1; i++)
            {
                lazyGraphics.Value.DrawLine(pen, path.Points[i].ToDrawingPoint(), path.Points[i + 1].ToDrawingPoint());
            }
        }