Java的繪圖模式使用淺析
繪圖模式是指后繪制的圖形與早先繪制的圖形有重疊時,如何確定重疊部分的顏色。例如,后繪制的覆蓋早先繪制的;或者后繪制與早先繪制的兩種顏色按某種規(guī)則混合。主要有正常模式和異或模式兩種:正常模式是后繪制的圖形覆蓋在早先繪制的圖形之上,使早先販圖形的重疊部分不再可見。異或模式把繪圖看作是按圖形著色。異或模式繪圖時,將當前正要繪圖的顏色、原先繪制的顏色以及異或模式設(shè)定的顏色作特定的運算,得到實際繪圖顏色。設(shè)置繪圖模式的方法有:
setPaintMode():設(shè)置繪圖模式為覆蓋模式(正常模式)。正常模式是繪圖的默認模式。
setXORMode(Color c):設(shè)置繪圖模式為異或模式,參數(shù)c為異或模式設(shè)定的繪圖顏色。
設(shè)背景色為B,用setXORMode()設(shè)置的顏色為C,另用某個非背景色D繪圖,XOR模式有以下確定實際繪圖顏色的法則:
- B + B = C,用背景色繪圖,出現(xiàn)C顏色。
- D + D = B,當一個圖形重畫時就能清除原先畫的圖形。
- B + D = B和D的混合色(當B,D不相同時)。
如果某區(qū)域已用D著色,再用E著色,則結(jié)果是:
- 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); //設(shè)置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);
}
}
相關(guān)文章
SpringBoot讀寫xml上傳到AWS存儲服務(wù)S3的示例
這篇文章主要介紹了SpringBoot讀寫xml上傳到S3的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-10-10
Java面試synchronized偏向鎖后hashcode存址
這篇文章主要為大家介紹了Java面試中synchronized偏向鎖后hashcode存址詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
SpringBoot基于MyBatis-Plus實現(xiàn)Lambda Query查詢的示例代碼
MyBatis-Plus 是 MyBatis 的增強工具,簡化了數(shù)據(jù)庫操作,并提高了開發(fā)效率,它提供了多種查詢方式,包括常規(guī)的 SQL 查詢、Lambda Query 查詢、分頁查詢、條件查詢等,在本篇博客中,我們將詳細講解如何使用 MyBatis-Plus 的各種查詢方式,需要的朋友可以參考下2025-01-01
SpringBoot前后端json數(shù)據(jù)交互的全過程記錄
現(xiàn)在大多數(shù)互聯(lián)網(wǎng)項目都是采用前后端分離的方式開發(fā),下面這篇文章主要給大家介紹了關(guān)于SpringBoot前后端json數(shù)據(jù)交互的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-03-03
Spring?BeanFactory容器的構(gòu)建和使用示例詳解
BeanFactory是Spring框架中的一部分,它提供了IoC(控制反轉(zhuǎn))的實現(xiàn)機制,下面小編就來和大家簡單聊聊BeanFactory容器的構(gòu)建和使用示例吧2023-07-07

