private void UpdateBitmapSources()

in src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs [1579:1699]


        private void UpdateBitmapSources()
        {
            if (_spectrumOverlayRectangle == null ||
                _spectrumOverlayEllipse == null ||
                _spectrumRectangle == null ||
                _spectrumEllipse == null)
            {
                return;
            }

            HsvColor hsvColor = HsvColor;
            ColorSpectrumComponents components = Components;

            // We'll set the base image and the overlay image based on which component is our third dimension.
            // If it's saturation or luminosity, then the base image is that dimension at its minimum value,
            // while the overlay image is that dimension at its maximum value.
            // If it's hue, then we'll figure out where in the color wheel we are, and then use the two
            // colors on either side of our position as our base image and overlay image.
            // For example, if our hue is orange, then the base image would be red and the overlay image yellow.
            switch (components)
            {
                case ColorSpectrumComponents.HueValue:
                case ColorSpectrumComponents.ValueHue:
                    {
                        if (_saturationMinimumBitmap == null ||
                            _saturationMaximumBitmap == null)
                        {
                            return;
                        }

                        ImageBrush spectrumBrush = new ImageBrush(_saturationMinimumBitmap);
                        ImageBrush spectrumOverlayBrush = new ImageBrush(_saturationMaximumBitmap);

                        _spectrumOverlayRectangle.Opacity = hsvColor.S;
                        _spectrumOverlayEllipse.Opacity = hsvColor.S;
                        _spectrumRectangle.Fill = spectrumBrush;
                        _spectrumEllipse.Fill = spectrumBrush;
                        _spectrumOverlayRectangle.Fill = spectrumOverlayBrush;
                        _spectrumOverlayRectangle.Fill = spectrumOverlayBrush;
                    }
                    break;

                case ColorSpectrumComponents.HueSaturation:
                case ColorSpectrumComponents.SaturationHue:
                    {
                        if (_valueBitmap == null)
                        {
                            return;
                        }

                        ImageBrush spectrumBrush = new ImageBrush(_valueBitmap);
                        ImageBrush spectrumOverlayBrush = new ImageBrush(_valueBitmap);

                        _spectrumOverlayRectangle.Opacity = 1.0;
                        _spectrumOverlayEllipse.Opacity = 1.0;
                        _spectrumRectangle.Fill = spectrumBrush;
                        _spectrumEllipse.Fill = spectrumBrush;
                        _spectrumOverlayRectangle.Fill = spectrumOverlayBrush;
                        _spectrumOverlayRectangle.Fill = spectrumOverlayBrush;
                    }
                    break;

                case ColorSpectrumComponents.ValueSaturation:
                case ColorSpectrumComponents.SaturationValue:
                    {
                        if (_hueRedBitmap == null ||
                            _hueYellowBitmap == null ||
                            _hueGreenBitmap == null ||
                            _hueCyanBitmap == null ||
                            _hueBlueBitmap == null ||
                            _huePurpleBitmap == null)
                        {
                            return;
                        }

                        ImageBrush spectrumBrush;
                        ImageBrush spectrumOverlayBrush;

                        double sextant = hsvColor.H / 60.0;

                        if (sextant < 1)
                        {
                            spectrumBrush = new ImageBrush(_hueRedBitmap);
                            spectrumOverlayBrush = new ImageBrush(_hueYellowBitmap);
                        }
                        else if (sextant >= 1 && sextant < 2)
                        {
                            spectrumBrush = new ImageBrush(_hueYellowBitmap);
                            spectrumOverlayBrush = new ImageBrush(_hueGreenBitmap);
                        }
                        else if (sextant >= 2 && sextant < 3)
                        {
                            spectrumBrush = new ImageBrush(_hueGreenBitmap);
                            spectrumOverlayBrush = new ImageBrush(_hueCyanBitmap);
                        }
                        else if (sextant >= 3 && sextant < 4)
                        {
                            spectrumBrush = new ImageBrush(_hueCyanBitmap);
                            spectrumOverlayBrush = new ImageBrush(_hueBlueBitmap);
                        }
                        else if (sextant >= 4 && sextant < 5)
                        {
                            spectrumBrush = new ImageBrush(_hueBlueBitmap);
                            spectrumOverlayBrush = new ImageBrush(_huePurpleBitmap);
                        }
                        else
                        {
                            spectrumBrush = new ImageBrush(_huePurpleBitmap);
                            spectrumOverlayBrush = new ImageBrush(_hueRedBitmap);
                        }

                        _spectrumOverlayRectangle.Opacity = sextant - (int)sextant;
                        _spectrumOverlayEllipse.Opacity = sextant - (int)sextant;
                        _spectrumRectangle.Fill = spectrumBrush;
                        _spectrumEllipse.Fill = spectrumBrush;
                        _spectrumOverlayRectangle.Fill = spectrumOverlayBrush;
                        _spectrumOverlayRectangle.Fill = spectrumOverlayBrush;
                    }
                    break;
            }
        }