Working with Color
Java supports color in a portable, device-independent fashion. The
AWT color system allows you to specify any color you want. It then finds the
best match for that color, given the limits of the display hardware currently
executing your program or applet. Thus, your code does not need to be concerned
with the differences in the way color is supported by various hardware devices.
Color is encapsulated by the Color
class.
As you saw in Chapter 23, Color
defines several constants (for example, Color.black)
to specify a number of common colors. You can also create your own colors, using
one of the color constructors. Three commonly used forms are shown here:
Color(int red, int green, int blue) Color(int rgbValue)
Color(float red, float green, float blue)
The first constructor takes three integers that specify the color
as a mix of red, green, and blue. These values must be between 0 and 255, as in
this example:
new
Color(255, 100, 100); // light red
The second color constructor takes a single integer that contains
the mix of red, green, and blue packed into an integer. The integer is
organized with red in bits 16 to 23, green in bits 8 to 15, and blue in bits 0
to 7. Here is an example of this constructor:
int
newRed = (0xff000000 | (0xc0 << 16) | (0x00 << 8) | 0x00); Color
darkRed = new Color(newRed);
The final constructor, Color(float,
float, float), takes three float
values (between 0.0 and 1.0) that specify the relative mix of red, green, and
blue.
Once you have created a color, you can use it to set the foreground
and/or background color by using the setForeground(
) and setBackground( ) methods
described in Chapter 23. You can also select it as the current drawing color.
Color Methods
The Color class defines
several methods that help manipulate colors. Several are examined here.
Using Hue, Saturation, and Brightness
The hue-saturation-brightness
(HSB) color model is an alternative to red-green-blue (RGB) for specifying
particular colors. Figuratively, hue
is a wheel of color. The hue can be specified with a number between 0.0 and
1.0, which is used to obtain an angle into the color wheel. (The principal
colors are approximately red, orange, yellow, green, blue, indigo, and violet.)
Saturation is another scale ranging
from 0.0 to 1.0, representing light pastels to intense hues. Brightness values also range from 0.0 to
1.0, where 1 is bright white and 0 is black. Color supplies two methods that let you convert between RGB and
HSB. They are shown here:
static int HSBtoRGB(float hue,
float saturation, float brightness) static float[ ] RGBtoHSB(int
red, int green, int blue, float values[ ])
HSBtoRGB( ) returns a packed RGB value
compatible with the Color(int) constructor. RGBtoHSB( ) returns a float array of HSB values
corresponding to RGB integers. If values is not null, then this
array is given the HSB values and returned. Otherwise, a new array is created
and the HSB values are returned in it. In either case, the array contains the
hue at index 0, saturation at index 1, and brightness at index 2.
getRed( ), getGreen( ), getBlue( )
You can obtain the red, green, and blue components of a color
independently using getRed( ), getGreen( ), and getBlue( ), shown here:
int getRed( ) int getGreen( ) int getBlue( )
Each of these methods returns the RGB color component found in the
invoking Color object in the lower 8
bits of an integer.
getRGB( )
To obtain a packed, RGB representation of a color, use getRGB( ), shown here: int getRGB( )
The return value is organized as described earlier.
Setting the Current Graphics Color
By default, graphics objects are drawn in the current foreground
color. You can change this color by calling the Graphics method setColor( )
:
void setColor(Color newColor)
Here, newColor specifies
the new drawing color.
You can obtain the current color by calling getColor( ), shown here: Color getColor( )
A Color Demonstration Applet
The following applet constructs several colors and draws various
objects using these colors:
//
Demonstrate color.
import
java.awt.*; import java.applet.*; /*
<applet
code="ColorDemo" width=300 height=200> </applet>
*/
public class
ColorDemo extends Applet { // draw lines
public
void paint(Graphics g) {
Color c1
= new Color(255, 100, 100); Color c2 = new Color(100, 255, 100); Color c3 = new
Color(100, 100, 255);
g.setColor(c1);
g.drawLine(0, 0, 100, 100); g.drawLine(0, 100, 100, 0);
g.setColor(c2);
g.drawLine(40, 25, 250, 180); g.drawLine(75, 90, 400, 400);
g.setColor(c3);
g.drawLine(20, 150, 400, 40); g.drawLine(5, 290, 80, 19);
g.setColor(Color.red);
g.drawOval(10, 10, 50, 50);
illOval(70,
90, 140, 100);
g.setColor(Color.blue);
g.drawOval(190, 10, 90, 30); g.drawRect(10, 10, 60, 50);
g.setColor(Color.cyan);
g.fillRect(100, 10, 60, 50);
g.drawRoundRect(190,
10, 60, 50, 15, 15);
}
}
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.