javaGUI學習8:AWT-顏色
1、顏色模式
顏色模式將畫素值分為:紅、藍、綠和alpha
java.awt.image.ColorModel方法:
方法 | 實現或目的 |
---|---|
static ColorModel getRGBdefult() | 返回 AWT影象介面中許多方法中使用的整數RGB值的預設格式 |
abstract int getAlpha(int pixel) | 返回指定畫素的alpha分量,從0到255縮放。 |
abstract int getBlue(int pixel) | 回指定畫素的藍色分量,在預設RGB ColorSpace(sRGB)中從0到255縮放。 |
abstract int getGreen(int pixel) | 返回指定畫素的綠色分量,在預設RGB ColorSpace(sRGB)中從0到255縮放。 |
abstract int getRed(int pixel) | 返回指定畫素的紅色分量,在預設RGB ColorSpace(sRGB)中從0到255縮放。 |
int getRGB(int pixel) | 以預設RGB顏色模型格式返回畫素的顏色/ alpha分量。 |
int getPixeSize() | 返回此 ColorModel 描述的每畫素的 ColorModel |
java.awt . image軟體包支援兩種型別的顏色模式:索引顏色模式和直接顏色模式。
- 索引顏色模式將顏色說明為顏色陣列中的一個索引
- 直接顏色模式直接指明顏色值的位元位。
2、索引顏色模式
IndexColorModel類:一個ColorModel類,它使用由單個樣本組成的畫素值,該樣本是預設RGB顏色空間中固定色彩對映的索引。
IndexColorModel(int bits, int size, byte[] r byte[] g, byte[] b)
:根據指定的紅色,綠色和藍色元件陣列構造 IndexColorModel 。 bits為每個畫素的多少bit,下面的例子中,是一個位元組。size是r,g,b這三個一維陣列的大小。
MemoryImageSource類:此類是ImageProducer介面的實現,它使用陣列為Image生成畫素值。
MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan)
import java.applet.Applet;
import java.awt.*;
import java.awt.image.IndexColorModel;
import java.awt.image.MemoryImageSource;
public class demo05 extends Applet {
Color[] color = {Color.red,Color.green,Color.blue};
byte[] red = {(byte)color[0].getRed(),(byte)color[1].getRed(),(byte)color[2].getRed()};
byte[] green = {(byte)color[0].getGreen(),(byte)color[1].getGreen(),(byte)color[2].getGreen()};
byte[] blue = {(byte)color[0].getBlue(),(byte)color[1].getBlue(),(byte)color[2].getBlue()};
IndexColorModel icm = new IndexColorModel(8,3,red,green,blue);
Image image;
public void init() {
int[] imageBits = {
0,0,0,1,1,1,2,2,
0,0,0,1,1,1,2,2,
0,0,0,1,1,1,2,2,
0,0,0,1,0,1,2,2
};
MemoryImageSource mis = new MemoryImageSource(8,4,icm,imageBits,0,8);
image = createImage(mis);
}
public void paint(Graphics g) {
g.drawImage(image,0,0,20,20,this);
}
}
3、直接顏色
藍色成分儲存在0-7位,綠色成分儲存在8-15位,紅色成分儲存在16-23位,而alpha成分則儲存在24-31位。每個成分的長度都是8位,其值的範圍是0~255。值越高,顏色成分越強。例如,當 alpha的值是0時,表示完全透明;而是255時,則表示完全不透明。
如圖表示的是一個半透明的藍色:
使用時可以直接用16進製表示顏色,比如:0xff0000ff
表示的就是完全不透明的藍色。這裡的16進位制的4個位元組安順序分別代表:alpha,紅,綠,藍。
import java.applet.Applet;
import java.awt.*;
import java.awt.image.ColorModel;
import java.awt.image.IndexColorModel;
import java.awt.image.MemoryImageSource;
public class demo05 extends Applet {
ColorModel cm = ColorModel.getRGBdefault();
Image image;
public void init() {
int r = 0xffff0000;
int g = 0xff00ff00;
int b = 0xff0000ff;
int[] imageBits = {
r,r,r,g,g,g,b,b,b,
r,r,r,g,g,g,b,b,b,
r,r,r,g,g,g,b,b,b,
r,r,r,g,g,g,b,b,b
};
MemoryImageSource mis = new MemoryImageSource(9,4,cm,imageBits,0,9);
image = createImage(mis);
}
public void paint(Graphics g) {
g.drawImage(image,0,0,200,200,this);
}
}
執行結果:
4、java.awt.Color類
顏色常數:
Color.black //黑色
Color.blue //藍色
Color.cyan //藍綠色
Color.darkGray //暗灰色
Color.gray //灰色
Color.green //綠色
Color.lightGray //亮綠色
Color.magenta //紫紅色的
Color.orange //橘黃色
Color.pink //粉紅色
Color.red //紅色
Color.white //白色
Color.yellow //黃色
構造顏色:
Color ( float r,float g,float b)
Color ( float r,float g,float b,float alpha)Color ( int r,int g,int b)
Color ( int r,int g,int b,int alpha)Color ( int rgb)
Color ( int rgb,boolean hasAlpha)
Color (ColorSpace,float [ ] components,float alpha)
靜態方法:
static int HSBtoRGB(float hue, float saturation, float brightness) //將HSB模型指定的顏色分量轉換為預設RGB模型的等效值集。
static float[] RGBtoHSB(int r, int g, int b, float[] hsbvals) //將預設RGB模型指定的顏色分量轉換為色調,飽和度和亮度的等效值集,這些值是HSB模型的三個組成部分。
static Color decode(String nm) //將 String轉換為整數並返回指定的opaque Color 。
static Color getColor(String nm) //在系統屬性中查詢顏色。
static Color getColor(String nm, int v) //在系統屬性中查詢顏色。
static Color getColor(String nm, Color v) //在系統屬性中查詢顏色。
static Color getHSBColor(float h, float s, float b) //根據HSB顏色模型的指定值建立 Color物件。
例項方法:
Color brighter() //建立一個新的 Color ,它是此的一個亮的 Color 。
Color darker() //建立一個新的 Color ,它是該 Color的較暗版本。
PaintContext createContext(ColorModel cm, Rectangle r, Rectangle2D r2d, AffineTransform xform, RenderingHints hints) //建立並返回用於生成純色域圖案的PaintContext 。
boolean equals(Object obj) //確定另一個物件是否等於此 Color 。
int getAlpha() //返回0-255範圍內的alpha分量。
int getBlue() //返回預設sRGB空間中0-255範圍內的藍色分量。
float[] getColorComponents(float[] compArray) //返回一個 float陣列只包含的顏色分量 Color ,在 ColorSpace的的 Color 。
float[] getColorComponents(ColorSpace cspace, float[] compArray) //返回 float陣列,該陣列僅包含 cspace引數指定的 Color中的 ColorSpace的顏色分量。
ColorSpace getColorSpace() //返回 ColorSpace的 Color 。
float[] getComponents(float[] compArray) //返回一個 float陣列包含的顏色和alpha分量 Color ,在 ColorSpace的的 Color 。
float[] getComponents(ColorSpace cspace, float[] compArray) //返回一個 float陣列包含的顏色和alpha分量 Color ,在 ColorSpace由指定 cspace引數。
int getGreen() //返回預設sRGB空間中0-255範圍內的綠色分量。
int getRed() //返回預設sRGB空間中0-255範圍內的紅色分量。
int getRGB() //返回表示預設sRGB ColorModel中顏色的RGB值。
float[] getRGBColorComponents(float[] compArray) //返回一個 float陣列只包含的顏色分量 Color ,在預設的sRGB色彩空間。
float[] getRGBComponents(float[] compArray) //返回包含 float的顏色和alpha分量的 Color ,如預設sRGB顏色空間中所示。
int getTransparency() //返回此 Color的透明度模式。
int hashCode() //計算此 Color的雜湊碼。
String toString() //返回此 Color的字串表示 Color 。
5、系統顏色
系統顏色所描述的顏色用於本地的GUI控制元件。這些顏色都是java.awt.SystemColor類中的public static成員。
例項名 | 描述 | 預設值 |
---|---|---|
activeCaption | 活動標題背景 | Color(0,0,128) |
activeCaptionBorder | 活動標題邊界 | 淡灰色 |
activeCaptionText | 活動標題文字 | 白色 |
control | 控制元件背景 | 淺灰色 |
controlDKShadow | 控制元件黑陰影 | 黑色 |
controlHightlight | 控制元件低亮度 | 白色 |
controlLhightlight | 控制元件高低亮度 | Color(224,224,224) |
controlShadow | 控制元件陰影 | 灰色 |
controlText | 控制元件文字 | 黑色 |
desktop | 桌面背景 | Color(0,92,92) |
inactiveCaption | 不動標題背景 | 灰色 |
inactiveCaptionBorder | 不動標題邊界 | 淡灰色 |
inactiveCaptionText | 不動標題文字 | 淡灰色 |
info | 資訊背景 | Color(224,224,0) |
infoText | 資訊文字 | 黑色 |
menu | 選單背景 | 淺灰色 |
menuText | 選單文字 | 黑色 |
scrollbar | 滾動條背景 | Color(224,224,224) |
text | 文字背景 | 淺灰色 |
textHightlight | 突出文字背景 | Color(0,0,128) |
textHightlightText | 突出文字 | 白色 |
textInactiveText | 不動文字 | 灰色 |
textText | 文字 | 黑色 |
window | 視窗背景 | 白色 |
windowBorder | 視窗邊界 | 黑色 |
windowText | 視窗文字 | 黑色 |
注意:AWT構件自動使用系統顏色,但還是要保證使用這個類中指定的顏色。