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):构造一个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构件自动使用系统颜色,但还是要保证使用这个类中指定的颜色。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值