ColorFromHSV() public static method

public static ColorFromHSV ( HSV hsv, int alpha = 255 ) : Color
hsv HSV
alpha int
return Color
Exemplo n.º 1
0
        private void DrawSatValPanel(Canvas canvas)
        {
            var rect = _satValRect;

            if (BorderWidthPx > 0)
            {
                _borderPaint.Color = _borderColor;
                canvas.DrawRect(_drawingRect.Left, _drawingRect.Top, rect.Right + BorderWidthPx, rect.Bottom + BorderWidthPx, _borderPaint);
            }

            if (_valShader == null)
            {
                _valShader = new LinearGradient(rect.Left, rect.Top, rect.Left, rect.Bottom,
                                                Color.Argb(255, 255, 255, 255), Color.Argb(255, 0, 0, 0), Shader.TileMode.Clamp);
            }

            var rgb = ColorUtils.ColorFromHSV(_hue / 360f, 1f, 1f);

            using (_satShader = new LinearGradient(rect.Left, rect.Top, rect.Right, rect.Top,
                                                   Color.Argb(255, 255, 255, 255), rgb, Shader.TileMode.Clamp))
            {
                var mShader = new ComposeShader(_valShader, _satShader, PorterDuff.Mode.Multiply);
                _satValPaint.SetShader(mShader);

                canvas.DrawRect(rect, _satValPaint);
            }
            var p = SatValToPoint(_sat, _val);

            _satValTrackerPaint.Color = Color.Argb(255, 0, 0, 0);
            canvas.DrawCircle(p.X, p.Y, _paletteCircleTrackerRadius - 1f * _density, _satValTrackerPaint);

            _satValTrackerPaint.Color = Color.Argb(255, 221, 221, 221);
            canvas.DrawCircle(p.X, p.Y, _paletteCircleTrackerRadius, _satValTrackerPaint);
        }
Exemplo n.º 2
0
        private void DrawAlphaPanel(Canvas canvas)
        {
            if (!_showAlphaPanel || _alphaRect == null || _alphaPattern == null)
            {
                return;
            }

            var rect = _alphaRect;

            if (BorderWidthPx > 0)
            {
                _borderPaint.Color = _borderColor;
                canvas.DrawRect(rect.Left - BorderWidthPx,
                                rect.Top - BorderWidthPx,
                                rect.Right + BorderWidthPx,
                                rect.Bottom + BorderWidthPx,
                                _borderPaint);
            }


            _alphaPattern.Draw(canvas);

            var color  = ColorUtils.ColorFromHSV(_hue / 360f, _sat, _val);
            var acolor = ColorUtils.ColorFromHSV(_hue / 360f, _sat, _val, 0);

            using (_alphaShader = new LinearGradient(rect.Left, rect.Top, rect.Right, rect.Top,
                                                     color, acolor, Shader.TileMode.Clamp))
            {
                _alphaPaint.SetShader(_alphaShader);

                canvas.DrawRect(rect, _alphaPaint);
            }

            if (!string.IsNullOrEmpty(_alphaSliderText))
            {
                canvas.DrawText(_alphaSliderText, rect.CenterX(), rect.CenterY() + 4 * _density, _alphaTextPaint);
            }

            float rectWidth = 4 * _density / 2;

            var p = AlphaToPoint(_alpha);

            var r = new RectF
            {
                Left   = p.X - rectWidth,
                Right  = p.X + rectWidth,
                Top    = rect.Top - _rectangleTrackerOffset,
                Bottom = rect.Bottom + _rectangleTrackerOffset
            };

            canvas.DrawRoundRect(r, 2, 2, _hueTrackerPaint);
        }
Exemplo n.º 3
0
        private static int[] BuildHueColorArray()
        {
            var hue = new int[361];

            var count = 0;

            for (var i = hue.Length - 1; i >= 0; i--, count++)
            {
                hue[count] = ColorUtils.ColorFromHSV(i / 360f, 1f, 1f);
            }

            return(hue);
        }
Exemplo n.º 4
0
        private void DrawSatValPanel(Canvas canvas)
        {
            #if __ANDROID_11__
            if (Android.OS.Build.VERSION.SdkInt > Android.OS.BuildVersionCodes.Honeycomb)
            {
                RootView.SetLayerType(LayerType.Software, null);
            }
            #endif

            var rect = _satValRect;

            if (BorderWidthPx > 0)
            {
                _borderPaint.Color = _borderColor;
                canvas.DrawRect(_drawingRect.Left, _drawingRect.Top, rect.Right + BorderWidthPx, rect.Bottom + BorderWidthPx, _borderPaint);
            }

            if (_valShader == null)
            {
                _valShader = new LinearGradient(rect.Left, rect.Top, rect.Left, rect.Bottom,
                                                Color.Argb(255, 255, 255, 255), Color.Argb(255, 0, 0, 0), Shader.TileMode.Clamp);
            }

            var rgb = ColorUtils.ColorFromHSV(_hue / 360f, 1f, 1f);

            using (_satShader = new LinearGradient(rect.Left, rect.Top, rect.Right, rect.Top,
                                                   Color.Argb(255, 255, 255, 255), rgb, Shader.TileMode.Clamp))
            {
                var mShader = new ComposeShader(_valShader, _satShader, PorterDuff.Mode.Multiply);
                _satValPaint.SetShader(mShader);

                canvas.DrawRect(rect, _satValPaint);
            }
            var p = SatValToPoint(_sat, _val);

            _satValTrackerPaint.Color = Color.Argb(255, 0, 0, 0);
            canvas.DrawCircle(p.X, p.Y, _paletteCircleTrackerRadius - 1f * _density, _satValTrackerPaint);

            _satValTrackerPaint.Color = Color.Argb(255, 221, 221, 221);
            canvas.DrawCircle(p.X, p.Y, _paletteCircleTrackerRadius, _satValTrackerPaint);
        }
Exemplo n.º 5
0
        public override bool OnTouchEvent(MotionEvent e)
        {
            var update = false;

            switch (e.Action)
            {
            case MotionEventActions.Down:
                _startTouchPoint = new Point((int)e.GetX(), (int)e.GetY());
                update           = MoveTrackersIfNeeded(e);
                break;

            case MotionEventActions.Move:
                update = MoveTrackersIfNeeded(e);
                break;

            case MotionEventActions.Up:
                _startTouchPoint = null;
                update           = MoveTrackersIfNeeded(e);
                GC.Collect();     //Not sure if collecting too much here...
                break;
            }

            if (update)
            {
                if (ColorChanged != null)
                {
                    ColorChanged(this, new ColorChangedEventArgs {
                        Color = ColorUtils.ColorFromHSV(_hue / 360, _sat, _val, _alpha)
                    });
                }

                Invalidate();
                return(true);
            }
            return(base.OnTouchEvent(e));
        }
Exemplo n.º 6
0
        public override bool OnTrackballEvent(MotionEvent e)
        {
            var x = e.GetX();
            var y = e.GetY();

            var update = false;


            if (e.Action == MotionEventActions.Move)
            {
                switch (_lastTouchedPanel)
                {
                case PanelSatVal:
                    var sat = _sat + x / 50f;
                    var val = _val - y / 50f;

                    if (sat < 0f)
                    {
                        sat = 0f;
                    }
                    else if (sat > 1f)
                    {
                        sat = 1f;
                    }

                    if (val < 0f)
                    {
                        val = 0f;
                    }
                    else if (val > 1f)
                    {
                        val = 1f;
                    }

                    _sat = sat;
                    _val = val;

                    update = true;
                    break;

                case PanelHue:
                    var hue = _hue - y * 10f;

                    if (hue < 0f)
                    {
                        hue = 0f;
                    }
                    else if (hue > 360f)
                    {
                        hue = 360f;
                    }

                    _hue = hue;

                    update = true;
                    break;

                case PanelAlpha:

                    if (!_showAlphaPanel || _alphaRect == null)
                    {
                        update = false;
                    }
                    else
                    {
                        var alpha = (int)(_alpha - x * 10);

                        if (alpha < 0)
                        {
                            alpha = 0;
                        }
                        else if (alpha > 0xff)
                        {
                            alpha = 0xff;
                        }

                        _alpha = alpha;
                        update = true;
                    }
                    break;
                }
            }

            if (update)
            {
                if (ColorChanged != null)
                {
                    ColorChanged(this, new ColorChangedEventArgs {
                        Color = ColorUtils.ColorFromHSV(_hue / 360, _sat, _val, _alpha)
                    });
                }

                Invalidate();
                return(true);
            }

            return(base.OnTrackballEvent(e));
        }