色指定

Appletなどで色を指定するには Color クラスを使います。

Color.black などの色名や RGB 値や HSB 値で色が指定できます。

HSB というのは耳慣れないかもしれないので,やや詳しく説明しておきます。

H は hue(色相)です。0→1と増やしていくと赤→緑→青→赤と変化します。周期関数ですので1→2でも同じです。

S は saturation(彩度)です。0→1と増やしていくと無彩色(白・灰色・黒)から有彩色に鮮やかさが増します。

B は brightness(明度)です。0→1と増やしていくと黒から明るい色へと変化します。

次の簡単なアプレットは,上の円が B = 1 での極座標 (S, 2πH) に相当する色を描きます。 下の長方形は S = 1 での横軸 H,縦軸 B に相当する色です。

import java.awt.*;
import javax.swing.*;

public class Colors extends JApplet {
    Image img;

    public void init() {
        int width = getWidth();
        int height = getHeight();
        int r = (int)(width / (2 * Math.PI));
        setContentPane(new MyPanel());
        img = createImage(width, height);
        Graphics g = img.getGraphics();
        for (int i = 0; i < width; i++) {
            double x = (double) i / r - 1.5 * Math.PI;
            for (int j = 0; j < 2 * r; j++) {
                double y = (j - r + 0.5) / r;
                double d = Math.sqrt(x * x + y * y);
                if (d <= 1.0) {
                    float h = (float)(Math.atan2(y, x) / (2 * Math.PI));
                    float s = (float) d;
                    g.setColor(Color.getHSBColor(h, s, 1f));
                    g.fillRect(i, 2 * r - 1 - j, 1, 1);
                }
            }
            for (int j = 2 * r; j < height; j++) {
                float h = (float) i / width;
                float b = (float) (height - 1 - j) / (height - 1 - 2 * r);
                g.setColor(Color.getHSBColor(h, 1f, b));
                g.fillRect(i, j, 1, 1);
            }
        }
    }

    class MyPanel extends JPanel {
        protected void paintComponent(Graphics g) {
            g.drawImage(img, 0, 0, this);
        }
    }
}

<applet code="Colors.class" width="500" height="300">
</applet>

奥村晴彦

Last modified: 2006-01-03 13:53:41