繪圖模式是指后繪制的圖形與早先繪制的圖形有重疊時,如何確定重疊部分的顏色。例如,后繪制的覆蓋早先繪制的;或者后繪制與早先繪制的兩種顏色按某種規則混合。主要有正常模式和異或模式兩種:正常模式是后繪制的圖形覆蓋在早先繪制的圖形之上,使早先販圖形的重疊部分不再可見。異或模式把繪圖看作是按圖形著色。異或模式繪圖時,將當前正要繪圖的顏色、原先繪制的顏色以及異或模式設定的顏色作特定的運算,得到實際繪圖顏色。設置繪圖模式的方法有:
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 ); } } |