Animatroller.Framework.LogicalDevice.VirtualPixel1D.FadeTo C# (CSharp) Method

FadeTo() public method

public FadeTo ( ColorBrightness values, System.TimeSpan duration ) : VirtualPixel1D
values ColorBrightness
duration System.TimeSpan
return VirtualPixel1D
        public VirtualPixel1D FadeTo(ColorBrightness[] values, TimeSpan duration)
        {
            if (values.Length != this.pixelCount)
                throw new ArgumentOutOfRangeException("Invalid ColorBrightness length");

            var startColors = new Color[this.pixelCount];
            var startBrightness = new double[this.pixelCount];

            for (int chn = 0; chn < this.pixelCount; chn++)
            {
                if (this.color[chn].GetBrightness() == 0)
                {
                    this.color[chn] = values[chn].Color;
                    this.brightness[chn] = 0;
                }

                if (values[chn].Color.GetBrightness() == 0)
                {
                    values[chn].Color = this.color[chn];
                    values[chn].Brightness = 0;
                }

                startColors[chn] = this.color[chn];
                startBrightness[chn] = this.brightness[chn];
            }

            // 10 steps per second
            int steps = (int)(duration.TotalMilliseconds / 100);

            for (int i = 1; i < steps; i++)
            {
                double fadePosition = 1.0 * i / (steps - 1);

                for (int chn = 0; chn < values.Length; chn++)
                {
                    double newBrightness = startBrightness[chn] + (values[chn].Brightness - startBrightness[chn]) * fadePosition;

                    int r = (int)(startColors[chn].R + (values[chn].Color.R - startColors[chn].R) * fadePosition);
                    int g = (int)(startColors[chn].G + (values[chn].Color.G - startColors[chn].G) * fadePosition);
                    int b = (int)(startColors[chn].B + (values[chn].Color.B - startColors[chn].B) * fadePosition);
                    Color newColor = Color.FromArgb(r, g, b);

                    this.color[chn] = newColor;
                    this.brightness[chn] = newBrightness;
                }

                RaiseMultiPixelChanged(0, values.Length);

                System.Threading.Thread.Sleep(100);
            }

            return this;
        }

Same methods

VirtualPixel1D::FadeTo ( int position, Color color, double brightness, System.TimeSpan duration ) : VirtualPixel1D