コード例 #1
0
        /*__________________________________________________Общедоступные_методы__________________________________________________*/
        #region Public methods
        public Color GetColorFromX(int X)
        {
            double liner_pos = (X - g_left * Width) / (Width * g_width);

            if (liner_pos < 0)
            {
                return(left_col);
            }
            if (liner_pos > 1)
            {
                return(right_col);
            }
            gpolygon gpol_l = gpolygons.FindLast(arg => arg.cp.position <= liner_pos),
                     gpol_r = gpolygons.Find(arg => arg.cp.position > liner_pos);
            Color  left = left_col, right = right_col;
            double l_d = 0, r_d = 1;

            if (gpol_l != null)
            {
                left = gpol_l.cp.color; l_d = gpol_l.cp.position;
            }
            if (gpol_r != null)
            {
                right = gpol_r.cp.color; r_d = gpol_r.cp.position;
            }
            double value = (liner_pos - l_d) / (r_d - l_d);

            return(Color.FromArgb(left.R + (int)((right.R - left.R) * value), left.G + (int)((right.G - left.G) * value), left.B + (int)((right.B - left.B) * value)));
        }
コード例 #2
0
 public ColorGradientBar()
 {
     InitializeComponent();
     m_left_color         = Color.Black;
     m_right_color        = Color.White;
     standart_of_gpolygon = new double[][] {
         new double[] { 0D, 0D },
         new double[] { -gpol_width, gpol_height / 2D },
         new double[] { -gpol_width, gpol_height },
         new double[] { gpol_width, gpol_height },
         new double[] { gpol_width, gpol_height / 2D },
         new double[] { 0D, 0D }
     };
     gpolygons            = new List <gpolygon>();/*(new gpolygon[] {
                                                   * new gpolygon(this,Color.Black, 30000 / 300000d),
                                                   * new gpolygon(this,Color.Red, 1 / 3d),
                                                   * new gpolygon(this,Color.Blue, 2 / 3d)});*/
     g_left               = 0;
     g_top                = 0.15;
     g_width              = 1;
     g_height             = 1 - g_top * 2D;
     m_color_gradient_map = bitmap_liner;
     SizeChanged         += size_changed_handler;
     KeyDown             += (o, e) =>
     {
         if (e.KeyCode == Keys.Delete && selected_gpol != null)
         {
             gpolygons.Remove(selected_gpol);
             selected_gpol = null;
             OnColorGradientChanged();
             m_color_gradient_map = bitmap_liner;
             Invalidate();
         }
     };
     MouseDown += (obj, e) => {
         gpolygon taked = gpolygons.OrderByDescending(arg => arg.cp.position).FirstOrDefault(arg => arg.IsMyPoint(e.Location));
         if (e.Clicks == 2)
         {
             if (taked != null)
             {
                 ColorDialog cd = new ColorDialog();
                 cd.Color = taked.cp.color;
                 if (cd.ShowDialog() == DialogResult.OK)
                 {
                     taked.cp.color       = cd.Color;
                     taked.cp.argb        = cd.Color.ToArgb();
                     m_color_gradient_map = bitmap_liner;
                     OnColorGradientChanged();
                 }
             }
             else
             {
                 gpolygons.Add(new gpolygon(this, e.X)); OnColorGradientChanged();
             }
             Invalidate();
         }
         else if (taked != null)
         {
             taked.TakeAim();
         }
         selected_gpol = taked;
     };
     DoubleBuffered = true;
 }