Exemplo n.º 1
0
        private Image CreateRenderThreads(Size size,Area area)
        {
            Bitmap image = new Bitmap(size.Width,size.Height);
             BitmapEditor editor = new BitmapEditor(image);

             int[] ranges = GetRangesPixelsArray(size.Width,RenderSettings.NumberOfThreads);

             Thread[] threads = new Thread[RenderSettings.NumberOfThreads];

             editor.LockBits();
             for (int i = 0; i < RenderSettings.NumberOfThreads; i++)
             {
                 threads[i] = new Thread(new ParameterizedThreadStart(ProcessBitmapPart));
                 threads[i].IsBackground = true;
                 threads[i].Priority = RenderSettings.ThreadsPriority;
                 threads[i].Start(new ThreadData()
                 {
                    areaPlain = area,
                    imageSize = size,
                    widthStart = ranges[i],
                    widthEnd = ranges[i+1],
                    editorReference = editor
                 });
             }
             foreach (var t in threads)
             {
                 t.Join();
             }
             editor.UnlockBits();

            return image;
        }
Exemplo n.º 2
0
        private Image SingleIterationRender(Size size,Area area)
        {
            Bitmap image = new Bitmap(size.Width,size.Height);
            Graphics.FromImage(image).FillRectangle(new SolidBrush(_backgroundColor),0,0,size.Width,size.Height);
            BitmapEditor editor = new BitmapEditor(image);
            double realPart,imaginaryPart;

            editor.LockBits();
            for (int i = 0; i < size.Height; i++)
            {
                for (int r = 0; r < size.Width; r++)
                {
                    realPart = (r*_widthRatio) + area.Start.X;
                    imaginaryPart = (i* _heightRatio) + area.Start.Y;

                    if(Contains(realPart,imaginaryPart,_accuracy))
                    {
                        editor.SetPixel(r,i,_fractalColor);
                    }
                }

                if(RenderProgressCall != null)
                {
                    RenderProgressCall(i,size.Height);
                }
            }
            editor.UnlockBits();
            return image;
        }