绘图模式是指后绘制的图形与早先绘制的图形有重叠时,如何确定重叠部分的颜色。例如,后绘制的覆盖早先绘制的;或者后绘制与早先绘制的两种颜色按某种规则混合。主要有正常模式和异或模式两种:正常模式是后绘制的图形覆盖在早先绘制的图形之上,使早先贩图形的重叠部分不再可见。异或模式把绘图看作是按图形着色。异或模式绘图时,将当前正要绘图的颜色、原先绘制的颜色以及异或模式设定的颜色作特定的运算,得到实际绘图颜色。设置绘图模式的方法有:
setPaintMode():设置绘图模式为覆盖模式(正常模式)。正常模式是绘图的默认模式。
setXORMode(Color c):设置绘图模式为异或模式,参数c为异或模式设定的绘图颜色。
设背景色为B,用setXORMode()设置的颜色为C,另用某个非背景色D绘图,XOR模式有以下确定实际绘图颜色的法则:
- B + B = C,用背景色绘图,出现C颜色。
- D + D = B,当一个图形重画时就能清除原先画的图形。
- B + D = B和D的混合色(当B,D不相同时)。
如果某区域已用D着色,再用E着色,则结果是:
- D + E = D和E的混合色(当D,E不相同时)。
XOR绘图模式实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import javax.swing.*; import java.awt.*; public class Example7_4 extends JFrame{ public static void main(String args[]){ GraphicsDemo myGraphicsFrame = new GraphicsDemo(); } } class ShapesPanel extends JPanel{ SharpesPanel(){ setBackground(Color.white); } public void paintComponent(Graphics g){ super .paintComponent(g); setBackground(Color.yellow); //背景色为黄色 g.setXORMode(Color.red); //设置XOR绘图模式,颜色为红色 g.setColor(Color.green); g.fillRect( 20 , 20 , 80 , 40 ); //实际颜色是green + yellow的混合色=灰色 g.setColor(Color.yellow); g.fillRect( 60 , 20 , 80 , 40 ); //后一半是yellow+yellow=read,前一半是yellow+灰色 g.setColor(Color.green); g.fillRect( 20 , 70 , 80 , 40 ); //实际颜色是green+yellow的混合色=灰色. g.fillRect( 60 , 70 , 80 , 40 ); //前一半是(green+yellow)+gray =背景色,后一半是green+yellow = gray g.setColor(Color.green); g.drawLine( 80 , 100 , 180 , 200 ); //该直线是green+yellow = gray g.drawLine( 100 , 100 , 200 , 200 ); //同上 /*再绘制部分重叠的直线.原直线中间段是灰色+灰色=背景色,延长部分是green+yellow=gray.*/ g.drawLine( 140 , 140 , 220 , 220 ); g.setColor(Color.yellow); //分析下列直线颜色变化,与早先的力有重叠 g.drawLine( 20 , 30 , 160 , 30 ); g.drawLine( 20 , 75 , 160 , 75 ); } } class GraphicsDemod extends JFrame{ public GraphicsDemo(){ this .getContentPane().add( new ShapesPanel()); setTile( "基本绘图方法演示" ); setSize( 300 , 300 ); setVisible( true ); } } |