public static ColorFromHSV ( HSV hsv, int alpha = 255 ) : Color | ||
hsv | HSV | |
alpha | int | |
return | Color |
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); }
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); }
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); }
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); }
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)); }
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)); }