描画モードとは、先に描いたグラフィックに、後から描いたグラフィックが重なった場合に、重なった部分の色の決め方を指します。たとえば、後に描かれた色が先に描かれた色を上書きしたり、後で描かれた 2 つの色と先に描かれた 2 つの色が一定の規則に従って混合されたりします。メイン モードは 2 つあります: 通常モードと XOR モード: 通常モードでは、後で描画されたグラフィックスが、先に描画されたグラフィックスに重ねられるため、以前に描画されたグラフィックスの重なった部分は表示されなくなります。 XOR モードでは、描画を形状による色付けとして扱います。 XOR モードで描画する場合、現在描画している色、元に描画されている色、XOR モードで設定されている色に対して特定の演算を実行して、実際の描画色を取得します。描画モードを設定するメソッドは次のとおりです:
setPaintMode(): 描画モードをオーバーレイ モード (通常モード) に設定します。通常モードは描画のデフォルトのモードです。
setXORMode(Color c): 描画モードを XOR モードに設定します。パラメータ c は XOR モードで設定された描画色です。
背景色が 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 中国語 Web サイトに注目してください。