Java的绘图模式使用浅析

 更新时间:2015年10月09日 08:53:39   投稿:goldensun  
这篇文章主要介绍了Java的绘图模式使用浅析,以一个小例子大概列举了XOR模式下能干的一些事情,需要的朋友可以参考下

绘图模式是指后绘制的图形与早先绘制的图形有重叠时,如何确定重叠部分的颜色。例如,后绘制的覆盖早先绘制的;或者后绘制与早先绘制的两种颜色按某种规则混合。主要有正常模式和异或模式两种:正常模式是后绘制的图形覆盖在早先绘制的图形之上,使早先贩图形的重叠部分不再可见。异或模式把绘图看作是按图形着色。异或模式绘图时,将当前正要绘图的颜色、原先绘制的颜色以及异或模式设定的颜色作特定的运算,得到实际绘图颜色。设置绘图模式的方法有:
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虚拟机之类加载

    Java虚拟机之类加载

    这篇文章主要介绍了Java虚拟机之类加载,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • IDEA下因Lombok插件产生的Library source does not match the bytecode报错问题及解决方法(亲测可用)

    IDEA下因Lombok插件产生的Library source does not match the bytecode报

    这篇文章主要介绍了IDEA下因Lombok插件产生的Library source does not match the bytecode报错问题及解决方法,亲测试过好用,需要的朋友可以参考下
    2020-04-04
  • 如何使用JDBC连接数据库并执行SQL语句

    如何使用JDBC连接数据库并执行SQL语句

    JDBC是Java数据库连接的缩写,是Java程序与数据库进行交互的标准API。JDBC主要包括Java.sql和javax.sql两个包,通过DriverManager获取数据库连接对象Connection,并通过Statement或PreparedStatement执行SQL语句
    2023-04-04
  • java算法Leecode刷题统计有序矩阵中的负数

    java算法Leecode刷题统计有序矩阵中的负数

    这篇文章主要为大家介绍了java算法Leecode刷题统计有序矩阵中的负数示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • java 设计模式之适配器模式的详解

    java 设计模式之适配器模式的详解

    这篇文章主要介绍了java 设计模式之适配器模式的详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • Java使用JSONObject需要的6个jar包下载地址

    Java使用JSONObject需要的6个jar包下载地址

    这篇文章主要介绍了Java使用JSONObject需要的6个jar包下载地址,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Spring通过三级缓存解决循环依赖问题的过程详解

    Spring通过三级缓存解决循环依赖问题的过程详解

    循环依赖指的是在对象之间存在相互依赖关系,形成一个闭环,导致无法准确地完成对象的创建和初始化,本文主要介绍了Spring通过三级缓存解决循环依赖的方法,需要的可以参考下
    2023-10-10
  • RocketMQ消息发送流程源码剖析

    RocketMQ消息发送流程源码剖析

    这篇文章主要为大家介绍了RocketMQ消息发送流程源码剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Springcloud hystrix服务熔断和dashboard如何实现

    Springcloud hystrix服务熔断和dashboard如何实现

    这篇文章主要介绍了Springcloud hystrix服务熔断和dashboard如何实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 使用Java 压缩文件打包tar.gz 包的详细教程

    使用Java 压缩文件打包tar.gz 包的详细教程

    本文带领大家学习如何使用Java 压缩文件打包tar.gz 包,主要通过 Apache compress 工具打包,通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2021-05-05

最新评论