繪圖模式是指後繪製的圖形與早先繪製的圖形有重疊時,如何確定重疊部分的顏色。例如,後繪製的覆蓋早先繪製的;或者後繪製與早先繪製的兩種顏色按某種規則混合。主要有正常模式和異或模式兩種:正常模式是後繪製的圖形覆蓋在早先繪製的圖形之上,使早先販圖形的重疊部分不再可見。異或模式把繪圖看成是按圖形著色。異或模式繪圖時,將目前正要繪圖的顏色、原先繪製的顏色以及異或模式設定的顏色作特定的運算,得到實際繪圖顏色。設定繪圖模式的方法有:
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繪圖模式實例
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); } }
更多Java的繪圖模式使用淺析相關文章請關注PHP中文網!