Java图像图形处理11 2.docx
《Java图像图形处理11 2.docx》由会员分享,可在线阅读,更多相关《Java图像图形处理11 2.docx(17页珍藏版)》请在冰豆网上搜索。
![Java图像图形处理11 2.docx](https://file1.bdocx.com/fileroot1/2022-10/9/bd6cbbd8-f690-4c7f-a2f4-f2417239b9fb/bd6cbbd8-f690-4c7f-a2f4-f2417239b9fb1.gif)
Java图像图形处理112
Java图像图形处理11.2
11.2绘制图形的颜色及其他
在上一节我们简要介绍了几何图形的绘制,本节主要讨论图形的颜色及绘制模式。
11.2.1颜色类(Color)
Java中颜色的设置采用与设备无关的方式,允许用户指定任何需要的颜色,java.awt.Color类定义了一系列常量用以指定常用的颜色,也可以通过Color类的构造方法生成所需要的颜色对象。
1.常用的构造方法
我们可以使用如下的构造方法构造颜色对象:
1)Color(intred,intgreen,intblue)使用红、绿、蓝三个整数表示混合后的颜色,red,grenn,blue取值范围在0~255之间。
如newColor(255,100,100)可表示亮红色。
2)Color(intrgbValue)采用红、绿、蓝构成的一个整数来表示颜色。
一般常写成16进制形式。
如0xffffff表示白色(最亮)。
3)Color(floatred,floatgreen,floatblue)使用三浮点数指定红、绿、蓝三个分量表示颜色。
取值范围在0.0~1.0之间。
2.类常量
Color类提供了一些常量来指定颜色,下表11.1列出了类常量及所表示的颜色。
表11.1颜色的类常量表常数
颜色
常数
颜色
black、BLACK
黑色
magenta、MAGENTA
洋红色
blue、BLUE
蓝色
orange、ORANGE
桔黄色
cyan、CYAN
青色
pink、PINK
粉红色
darkGray、DARK_GRAY
深灰色
red、RED
红色
gray、GRAY
灰色
white、WHITE
白色
green、GREEN
绿色
yellow、YELLOW
黄色
lightGray、LIGHT_GRAY
浅灰色3.常用方法
1)publicintgetRed()返回颜色中包含红的成份。
2)publicintgetGreen()返回颜色中包含绿的成份。
3)publicintgetBlue()返回颜色中包含蓝的成份。
4)publicstaticintHSBtoRGB(floathue,floatsaturation,floatbrightness)返回RGB值。
5)publicstaticfloat[]RGBtoHSB(intred,intgreen,intblue,floatvalues[])返回一个与RGB值相应的HSB值的浮点数组。
若values不为空(null),即values[0]表示色相、values[1]表示饱和度、values[2]表示亮度。
注意:
HSB(hue-saturation-brightness)是另一种指定颜色的方式,色相(hue)大约有红色、橙色、黄色、绿色、蓝色、靛青、紫色等;饱和度(staturation)代表了相应的色相的深浅或鲜艳程度;亮度(brightness)表示明暗。
它们都是介于0.0~1.0之间。
下边我们看一个示例。
例11.10使用applet绘制如图11-10所示奥运五环。
图11-10例11.10运行屏幕
程序参考代码如下:
/*这是一个设置绘图颜色的示例程序
*程序的名称是:
ColorExam11_10.java
*/
importjava.awt.*;
importjavax.swing.*;
publicclassColorExam11_10extendsJApplet
{
publicvoidpaint(Graphicsg)
{
g.setColor(Color.cyan);
g.fillRect(10,10,250,150);//填充矩形
g.setColor(Color.blue);//取得颜色
g.drawOval(50,50,50,50);
g.setColor(Color.black);//取得颜色
g.drawOval(105,50,50,50);
g.setColor(Color.red);//取得颜色
g.drawOval(160,50,50,50);
g.setColor(Color.orange);//取得颜色
g.drawOval(75,76,50,50);
g.setColor(Color.green);//取得颜色
g.drawOval(130,76,50,50);
}
}
在绘制图形的过程中,我们一般使用绘图类的setColor()方法设置新的绘制颜色,使用getColor()方法获得当前的绘制颜色。
11.2.2调色板
在一些常用的绘图工具中,一般都提供了调色板的功能。
在Java中,我们可以使用javax.swing.包中的JColorChooser类来实现调色板的功能。
JColorChooser提供一个用于允许用户操作和选择颜色的控制器窗格。
下边简要介绍一下JColorChooser类的功能。
1.构造方法
构建对象的方法如下:
1)JColorChooser()创建初始颜色为白色的颜色选取器窗格。
2)JColorChooser(ColorinitialColor)创建具有指定初始颜色的颜色选取器窗格。
3)JColorChooser(ColorSelectionModelmodel)创建具有指定ColorSelectionModel颜色选取器窗格。
2.类常量
1)CHOOSER_PANELS_PROPERTY其值为"chooserPanels",表示选择器窗格属性名。
2)PREVIEW_PANEL_PROPERTY其值为"previewPanel",表示预览窗格属性名。
3)SELECTION_MODEL_PROPERTY其值为"selectionModel",表示选择模型属性名。
3.常用方法
1)publicColorgetColor()获取颜色选取器的当前颜色值。
2)publicvoidsetColor(intr,intg,intb)将颜色选取器的当前颜色设置为指定的RGB颜色。
3)publicstaticColorshowDiaglog(Componentcomponent,Stringtitle,ColorinitColor)显示颜色选取器窗格并返回选取的颜色。
其中参数component表示该对话窗格所依赖的组件,title设置窗格标题,initColor设置初置的颜色。
showDialog()方法是一个类方法,在程序可以使用它来创建一个颜色对话框,选取所需要的颜色。
下边我们举一个例子说明调色板的应用。
例11.11设计如图11-11的用户屏幕,在界面上安排一个容器组件显示信息;安排一个按钮,当单击此按钮时弹出调色板对话框,选中所需颜色后,即以该颜色作为显示容器的背景色。
图11-11例11.11运行界面
程序参考代码如下:
/*这是一个使用调色板选取绘图颜色的示例程序
*程序的名称是:
ColorExam11_11.java
*/
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
classColorExam11_11extendsJFrameimplementsActionListener
{
JButtonbt1=newJButton("改变颜色");
JPanelp1=newJPanel();
publicColorExam11_11()
{
Containerpane=this.getContentPane();
pane.setLayout(newFlowLayout());
pane.add(p1);
pane.add(bt1);
p1.add(newJLabel("这是一个改变对象背景的示例!
"));
bt1.addActionListener(this);
setSize(200,200);
setVisible(true);
setTitle("演示颜色对话框");
setDefaultCloseOperation(3);
}
publicstaticvoidmain(Stringargs[])
{
newColorExam11_11();
}
publicvoidactionPerformed(ActionEvente)
{
Colorc=JColorChooser.showDialog(null,"调色板",p1.getBackground());
p1.setBackground(c);
}
}
请大家运行上述程序,看一下调色板的应用。
11.2.3绘图模式
一般情况下,如果在同一位置多次绘制图形时,最近绘制的图形将覆盖原有的图形。
Graphics类中提供了以下两个方法来设置绘图模式(paintmode):
1)voidsetXORMode(ColorxorColor)xorColor指定了绘制图形时与窗口进行异或操作的颜色,使新绘制的图形以异或操作的方式加入到容器中。
异或模式的优点是无论使用什么颜色绘制,新的图形总是可见的。
2)voidsetPaintMode()覆盖模式,最新的图形总是覆盖原有的图形。
绘图模式可以控制被绘制的图形在容器上的显示方式,我们可以通过设置绘图模式来决定图形重叠部分之间的运算。
下边举一个简单的示例,看一下不同模式的绘制结果。
例11.12在applet容器中,绘制3个填充矩形,其中两个矩形以两种模式绘制并覆盖另一个矩形的一部分,对比一下绘制效果。
程序参考代码如下:
/*这是一个使用不同模式绘制图形的示例程序
*程序的名称是:
GriphicExam11_12.java
*/
importjava.awt.*;
importjava.applet.*;
publicclassGriphicExam11_12extendsApplet
{
publicvoidpaint(Graphicsg)
{
Colorcolor=newColor(0,255,0);
g.setColor(color);//前景绿色
g.fillRect(50,10,100,50);//填充矩形
g.setColor(Color.red);//设置红色
g.fillRect(10,10,60,30);//填充矩形
g.setXORMode(Color.yellow);//设置异或绘制模式
g.fillRect(120,10,100,30);//填充的矩形
}
}
请大家运行程序,看一下两种不同模式的绘制有什么区别。
11.2.4画笔
图形是由画笔绘制的,在前边我们讨论了如何改变画笔的颜色。
下边我们看一下如何设置画笔的大小和样式。
改变图形的样式时,需要用到java.awt.BasicStroke类,它可定义直线的宽度、连接的样式、直线末端的样式以及虚线的样式等。
下边简要介绍一下该类的功能及应用。
1.构造方法
构造BasicStroke对象常用的方法如下:
1)BasicStroke(floatwidth)
2)BasicStroke(floatwidth,intcap,intjoin)
3)BasicStroke(floatwidth,int