2016-04-16 2 views
2

Мне нужно произвольно генерировать цвета в графическом интерфейсе Swing, но проблема в том, что я хочу, чтобы они были только яркими.Как создать случайный яркий цвет?

+0

Я думаю, что это сообщение может вам помочь. http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color –

+0

Некоторые [примеры] (http://stackoverflow.com/search?tab=votes&q=user%3a230513%20Color .getHSBColor). – trashgod

ответ

3

Используйте статический метод класса цвета getHSBColor(...) и убедитесь, что третий параметр, соответствующий яркости, для вас достаточно высок, возможно,> 0.8f (но < 1.0f).

Например, приведенный ниже код использует вышеупомянутый метод, чтобы найти случайный яркий цвет:

float h = random.nextFloat(); 
    float s = random.nextFloat(); 
    float b = MIN_BRIGHTNESS + ((1f - MIN_BRIGHTNESS) * random.nextFloat()); 
    Color c = Color.getHSBColor(h, s, b); 

с использованием случайной переменной с именем случайным образом, и значение MIN_BRIGHTNESS из 0.8f:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.util.Random; 

import javax.swing.*; 

public class RandomBrightColors extends JPanel { 
    private static final int PREF_W = 500; 
    private static final int PREF_H = PREF_W; 
    private static final int RECT_W = 30; 
    private static final int RECT_H = RECT_W; 
    private static final float MIN_BRIGHTNESS = 0.8f; 
    private Random random = new Random(); 

    public RandomBrightColors() { 
     setBackground(Color.BLACK); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     for (int i = 0; i < 100; i++) { 
      g.setColor(createRandomBrightColor()); 
      int x = random.nextInt(getWidth() - RECT_W); 
      int y = random.nextInt(getHeight() - RECT_H); 
      g.fillRect(x, y, RECT_W, RECT_H); 
     } 
    } 

    private Color createRandomBrightColor() { 
     float h = random.nextFloat(); 
     float s = random.nextFloat(); 
     float b = MIN_BRIGHTNESS + ((1f - MIN_BRIGHTNESS) * random.nextFloat()); 
     Color c = Color.getHSBColor(h, s, b); 
     return c; 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     if (isPreferredSizeSet()) { 
      return super.getPreferredSize(); 
     } 
     return new Dimension(PREF_W, PREF_H); 
    } 

    private static void createAndShowGui() { 
     RandomBrightColors mainPanel = new RandomBrightColors(); 

     JFrame frame = new JFrame("RandomBrightColors"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> { 
      createAndShowGui(); 
     }); 
    } 
} 

отредактируйте: или, если вы хотите, чтобы цвета были полностью насыщенными, измените параметр насыщения на 1f:

private Color createRandomBrightColor() { 
    float h = random.nextFloat(); 
    float s = 1f; 
    float b = MIN_BRIGHTNESS + ((1f - MIN_BRIGHTNESS) * random.nextFloat()); 
    Color c = Color.getHSBColor(h, s, b); 
    return c; 
} 

Также обратите внимание, что это можно сделать, используя цвет RGB с параметром 3 int, но если вы это сделаете, обратите внимание, что один параметр должен быть близок к 255, но должен быть близок к но не ниже 0, а другой может быть случайное что-нибудь между 0 и 255.

Смежные вопросы