1. 程式人生 > 其它 >javaGUI學習8:AWT-顏色

javaGUI學習8:AWT-顏色

技術標籤:javaGUIjava

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)

:構造一個ImageProducer物件,該物件使用位元組陣列為Image物件生成資料。 w,h是畫素圖的大小,cm顏色模式,pix是畫素矩陣,每個值是上面生成的IndexColormodel中的對應索引值,off是開始的列號,scan結束的列號。 比如:0索引對應的IndexColorModel中的值就是,red,green,blue陣列0索引對應的值組成的顏色的索引。

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構件自動使用系統顏色,但還是要保證使用這個類中指定的顏色。