Example #1
0
        public static Bitmap RenderHighRes(MultislitConfiguration configuration, Size size, ProgressProvider progress)
        {
            double[] yBrightnessFactors = MultislitRenderer.CalculateYBrightnessDistribution(configuration, size.Height);

            using (FastBitmap target = new FastBitmap(size, Color.FromArgb(10, 10, 10)))
            {
                int    chunkSize      = 10;
                int    finishedChunks = 0;
                double chunkFactor    = ((double)chunkSize / size.Width);
                if (configuration.LightSources.Any())
                {
                    Parallel.For(0, (int)Math.Ceiling(size.Width / (double)chunkSize), i =>
                    {
                        for (int ix = i * chunkSize; ix < Math.Min(i * chunkSize + chunkSize, size.Width); ix++)
                        {
                            double x        = (ix - size.Width * 0.5) / configuration.Scale;
                            RgbColor xColor = configuration.Brightness * MultislitRenderer.CalculateColorAt(configuration, x, 1, 250);

                            for (int iy = 0; iy < size.Height; iy++)
                            {
                                if (target == null || target.IsDisposed)
                                {
                                    return;
                                }

                                if (configuration.DisplayDistribution)
                                {
                                    target[ix, iy] = xColor;
                                }
                                else
                                {
                                    target[ix, iy] = yBrightnessFactors[iy] * xColor;
                                }
                            }
                        }

                        finishedChunks++;
                        progress.Progress = chunkFactor * finishedChunks;
                    });
                }

                return((Bitmap)target.InternalBitmap.Clone());
            }
        }
Example #2
0
 /// <summary>
 /// Renders an image of the specified multislit configuration.
 /// </summary>
 /// <param name="configuration">The multislit configuration.</param>
 /// <param name="size">The image size.</param>
 /// <returns>A rendering of the specified multislit configuration</returns>
 public static Bitmap Render(MultislitConfiguration configuration, Size size)
 {
     return(MultislitRenderer.Render(configuration, size, 1));
 }
Example #3
0
 /// <summary>
 /// The internal, overridable method in which all of the rendering takes place.
 /// </summary>
 /// <returns>The current rendering of the simulation.</returns>
 protected virtual Bitmap RenderInternal()
 {
     return(MultislitRenderer.Render(this.configuration, this.Size, 5));
 }