Example #1
0
        /// <summary> Override <see cref="PaletteBase.GetSliderBrush"/>. </summary>
        public override GradientStopCollection GetSliderBrush(HSV HSV)
        {
            byte  A = HSV.A;
            float H = HSV.H;
            float S = HSV.S;
            float L = HSV.V;

            return(new GradientStopCollection()
            {
                new GradientStop()
                {
                    Offset = 0,
                    Color = HSV.HSVtoRGB(A, H, 0.0f, L)
                },
                new GradientStop()
                {
                    Offset = 1,
                    Color = HSV.HSVtoRGB(A, H, 100.0f, L)
                },
            });
        }
Example #2
0
        /// <summary> Override <see cref="PalettePicker.GetSliderBrush"/>. </summary>
        public override GradientStopCollection GetSliderBrush(HSV hsv)
        {
            byte  A = HSV.A;
            float H = HSV.H;
            float S = HSV.S;
            float V = HSV.V;

            return(new GradientStopCollection()
            {
                new GradientStop()
                {
                    Offset = 0.0f,
                    Color = HSV.HSVtoRGB(A, H, S, 0)
                },
                new GradientStop()
                {
                    Offset = 1.0f,
                    Color = HSV.HSVtoRGB(A, H, S, 100)
                },
            });
        }
Example #3
0
        /// <summary> Override <see cref="PaletteBase.Draw"/>. </summary>
        public override void Draw(CanvasControl sender, CanvasDrawingSession ds, HSV hsv, Vector2 Center, float squareHalfWidth, float squareHalfHeight)
        {
            //Palette
            Rect rect = new Rect(Center.X - squareHalfWidth, Center.Y - squareHalfHeight, squareHalfWidth * 2, squareHalfHeight * 2);

            ds.FillRoundedRectangle(rect, 4, 4, new CanvasLinearGradientBrush(sender, Windows.UI.Colors.White, HSV.HSVtoRGB(hsv.H))
            {
                StartPoint = new Vector2(Center.X - squareHalfWidth, Center.Y), EndPoint = new Vector2(Center.X + squareHalfWidth, Center.Y)
            });
            ds.FillRoundedRectangle(rect, 4, 4, new CanvasLinearGradientBrush(sender, Windows.UI.Colors.Transparent, Windows.UI.Colors.Black)
            {
                StartPoint = new Vector2(Center.X, Center.Y - squareHalfHeight), EndPoint = new Vector2(Center.X, Center.Y + squareHalfHeight)
            });
            ds.DrawRoundedRectangle(rect, 4, 4, Windows.UI.Colors.Gray);

            //Thumb
            float px = ((float)hsv.S - 50) * squareHalfWidth / 50 + Center.X;
            float py = (50 - (float)hsv.V) * squareHalfHeight / 50 + Center.Y;

            ds.DrawCircle(px, py, 9, Windows.UI.Colors.Black, 5);
            ds.DrawCircle(px, py, 9, Windows.UI.Colors.White, 3);
        }
Example #4
0
        /// <summary>
        /// Palette color from colors
        /// </summary>
        /// <param name="colors"> Color array. </param>
        /// <returns> Color </returns>
        public static Color GetPaletteFromColors(Color[] colors)
        {
            try
            {
                //saturation
                double sumS = 0;

                //value
                double sumV = 0;
                double sumHue = 0;

                double maxV = 0;
                double maxS = 0;
                double maxH = 0;
                double count = 0;
                foreach (var color in colors)
                {
                    HSV hsv = HSV.RGBtoHSV(color);

                    if (hsv.H == 0)continue;
                    
                    maxS = hsv.S > maxS ? hsv.S : maxS;
                    maxV = hsv.V > maxV ? hsv.V : maxV;
                    maxH = hsv.H > maxH ? hsv.H : maxH;
                    sumHue += hsv.H;
                    sumS += hsv.S;
                    sumV += hsv.V;
                    count++;
                }


                double avgH = sumHue / count;
                double avgV = sumV / count;
                double avgS = sumS / count;
                double maxAvgV = maxV / 2;
                double maxAvgS = maxS / 2;
                double maxAvgH = maxH / 2;

                double h = Math.Max(maxAvgV, avgV);
                double s = Math.Min(maxAvgS, avgS);
                double hue = Math.Min(maxAvgH, avgH);

                double R = 0;
                double G = 0;
                double B = 0;
                count = 0;


                foreach (var color in colors)
                {
                    HSV hsv = HSV.RGBtoHSV(color);

                    if (hsv.H == 0) continue;

                    if (hsv.H >= hue + 10 && hsv.V >= h && hsv.S >= s)
                    {
                        R += color.R;
                        G += color.G;
                        B += color.B;
                        count++;
                    }
                }

                double r = R / count;
                double g = G / count;
                double b = B / count;

                //   if (r + g + b > 96 && r + g + b < 672)
                return Color.FromArgb(255, (byte)r, (byte)g, (byte)b);
            }
            catch (Exception)
            {
                return FallBackColor;
            }
        }
Example #5
0
 /// <summary> Override <see cref="PaletteBase.GetValue"/>. </summary>
 public override float GetValue(HSV hsv) => hsv.S;
Example #6
0
 /// <summary> Override <see cref="PaletteBase.GetHSL"/>. </summary>
 public override HSV GetHSL(HSV hsv, float value) => new HSV(hsv.A, hsv.H, value, hsv.V);
Example #7
0
 /// <summary> Override <see cref="PalettePicker.GetHSV"/>. </summary>
 public override HSV GetHSV(HSV hsv, float value) => new HSV(hsv.A, hsv.H, hsv.S, value);
 /// <summary>
 /// Get the slider background brush value from HSV
 /// </summary>
 /// <param name="hsv"> HSV </param>
 /// <returns> GradientStopCollection </returns>
 public abstract GradientStopCollection GetSliderBrush(HSV hsv);
 /// <summary>
 /// Get the corresponding value from HSV
 /// </summary>
 /// <param name="hsv"></param>
 /// <returns> Value </returns>
 public abstract float GetValue(HSV hsv);
 /// <summary>
 /// Change the current value to get the HSV
 /// </summary>
 /// <param name="hsv"> HSV</param>
 /// <param name="value"> The source value. </param>
 /// <returns> HSV </returns>
 public abstract HSV GetHSV(HSV hsv, float value);
 /// <summary>
 /// Occurs when dragging on a palette.
 /// </summary>
 /// <param name="hsv"> HSV </param>
 /// <param name="position"> Position </param>
 /// <param name="squareHalfWidth"> Palette square half width. </param>
 /// <param name="squareHalfHeight"> Palette square half height. </param>
 /// <returns> HSV </returns>
 public abstract HSV Delta(HSV hsv, Vector2 position, float squareHalfWidth, float squareHalfHeight);
 /// <summary>
 /// Draw
 /// </summary>
 /// <param name="sender"> CanvasControl </param>
 /// <param name="ds"> DrawingSession </param>
 /// <param name="hsv"> HSV </param>
 /// <param name="center"> Center </param>
 /// <param name="squareHalfWidth"> Palette square half width. </param>
 /// <param name="squareHalfHeight"> Palette square half height. </param>
 /// <param name="stroke"> The stroke brush. </param>
 public abstract void Draw(CanvasControl sender, CanvasDrawingSession ds, HSV hsv, Vector2 center, float squareHalfWidth, float squareHalfHeight, SolidColorBrush stroke);
Example #13
0
 /// <summary> Override <see cref="PaletteBase.GetValue"/>. </summary>
 public override float GetValue(HSV HSV) => HSV.H;