Как сделать динамическую цветовую сетку с помощью Java - PullRequest
1 голос
/ 07 октября 2010

Я хочу создать программу на Java, которая будет создавать динамические цветные сетки.Например, я хочу сделать 10 сеток, тогда цветовая сетка будет широко разнесена.и это 30, то он будет близко разнесен.Вот изображение: http://i.stack.imgur.com/D2yba.png

, и каждая сетка должна отвечать за проведение мероприятия.о да, там будет диапазон цветов.Что-то вроде 10 t0 100.

Я впервые попробовал со случайной функцией.Мы знаем, что диапазон цветов rgb составляет от 0 до 255. Поэтому я попытался создать какой-нибудь случайный цвет, но один цвет может прийти снова, и тогда он испортит все мои вещи.Мне нужны уникальные цветные сетки без повторов.На самом деле я хочу что-то в точности как изображение.

Может ли кто-нибудь помочь мне в этом!

Ответы [ 3 ]

0 голосов
/ 07 октября 2010

Пример того, как манипулировать цветами, чтобы сделать прекрасную радугу.

public class RainBowColorGenerator
{
  private static final int NR255 = 255;
  private static final int YELLOW_TRESHOLD = 200;

  private int r;
  private int g;
  private int b;

  public RainBowColorGenerator()
  {
    this(0, NR255, 0);
  }

  /**
   * Extra constructor so you can start with your own color in stead of the default green.
   * @param red the red component
   * @param green the green component
   * @param blue the blue component
   * @see java.awt.Color
   */
  public RainBowColorGenerator(int red, int green, int blue)
  {
    this.r = red;
    this.g = green;
    this.b = blue;
  }

  /**
   * Makes the next Color.
   * @return a Color
   */
  public Color nextColor()
  {
    nextRGB();
    return makeColor();
  }

  /**
   * Makes the next Color with a  bigger change then the unparametrized nextColor method.
   * @param jump the number of steps that should be taken, use 256 if you only want the primary colors.
   * @return a Color , yes indeed a color.
   */
  public Color nextColor( int jump )
  {
    for (int i = 0; i < jump; i++)
      {
      nextRGB();
      }
    return makeColor();
  }

  /**
   * Makes the next Color with a bigger change then the unparametrized nextColor method.
   * @param jump the number of steps that should be taken, use 256 if you only want the primary colors.
   * @return a Color , that will be never be really close to yellow.
   */
  public Color nextNonYellowColor( int jump )
  {
    Color color =  nextColor(jump);
    while ( color.getRed() > YELLOW_TRESHOLD && color.getGreen() > YELLOW_TRESHOLD )
      {
      color = nextColor(jump);
      }
    return color;
  }

  private void nextRGB()
  {
    if ( r == NR255 && g < NR255 && b == 0 )
      {
      g++;
      }
    if ( g == NR255 && r > 0 && b == 0 )
      {
      r--;
      }
    if ( g == NR255 && b < NR255 && r == 0 )
      {
      b++;
      }
    if ( b == NR255 && g > 0 && r == 0 )
      {
      g--;
      }
    if ( b == NR255 && r < NR255 && g == 0 )
      {
      r++;
      }
    if ( r == NR255 && b > 0 && g == 0 )
      {
      b--;
      }
  }

  private Color makeColor()
  {
    return new Color(r, g, b);
  }

  public static void main( String[] args )
  {
    final RainBowColorGenerator bow = new RainBowColorGenerator();
    JFrame frame = new JFrame(RainBowColorGenerator.class.toString());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    final JPanel mainpanel = new JPanel()
    {
      @Override
      public void paint( Graphics g )
      {
        super.paint(g);
        int w = getWidth();
        int h = getHeight();

        for (int i = 0; i< w; i++)
          {
          g.setColor(bow.nextColor(2));
          g.drawLine(i,0,i,h);
          }

      }
    };

    frame.getContentPane().add(mainpanel);
    //noinspection MagicNumber
    frame.setSize(800, 800);
    frame.setVisible(true);
  }
}
0 голосов
/ 07 октября 2010

На самом деле я хочу что-то в точности как изображение.

Это изображение не показывает случайные цвета. Он показывает разные «оттенки» цвета. Так как у вас есть 30 цветов, он в основном показывает разные цвета каждые 12 градусов (из круга 360 градусов). Эти цвета легче представить в цветовой схеме не RGB.

Посмотрите пример HSL Color , чтобы узнать, как легко это сделать.

0 голосов
/ 07 октября 2010

Вы можете начать с рассмотрения JColorChooser, как описано в Как использовать средства выбора цвета .Один из простых способов получения спектральной серии цветов - модель HSB ;выберите оттенки в диапазоне от 0 до 315 с постоянной насыщенностью и яркостью.Ваш вопрос не очень конкретен в отношении событий, но вот пример отображения информации, когда мышь перемещается по каждому цвету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...