当前位置: 首页 > 编程笔记 >

Java的绘图模式使用浅析

穆才良
2023-03-14
本文向大家介绍Java的绘图模式使用浅析,包括了Java的绘图模式使用浅析的使用技巧和注意事项,需要的朋友参考一下

绘图模式是指后绘制的图形与早先绘制的图形有重叠时,如何确定重叠部分的颜色。例如,后绘制的覆盖早先绘制的;或者后绘制与早先绘制的两种颜色按某种规则混合。主要有正常模式和异或模式两种:正常模式是后绘制的图形覆盖在早先绘制的图形之上,使早先贩图形的重叠部分不再可见。异或模式把绘图看作是按图形着色。异或模式绘图时,将当前正要绘图的颜色、原先绘制的颜色以及异或模式设定的颜色作特定的运算,得到实际绘图颜色。设置绘图模式的方法有:
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的Canvas,但由于我不知道自己在做什么而无法正常工作。这是我的简单代码: 窗口上没有任何内容。 我以为“画布”是纸而“图形”是我的铅笔是我的错吗?那是怎么回事? 问题答案: 意见建议: 不要使用Canvas,因为不要将AWT与Swing组件不必要地混合。 而是使用JPanel或JComponent。 不要通过调用组件来获取Graphics对象,因为获得的Graphi

  • 本文向大家介绍浅谈JAVA设计模式之享元模式,包括了浅谈JAVA设计模式之享元模式的使用技巧和注意事项,需要的朋友参考一下 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5

  • 问题内容: 我正在开发的Java Swing GUI需要根据程序中生成的x和y坐标绘制2D图形。 为此有一个Swing组件吗? 还是有其他目的的开源软件包? 问题答案: 您应该查看具有Swing支持的JFreeChart。以下是一些示例: http://www.jfree.org/jfreechart/samples.html

  • 本文向大家介绍浅析JavaScript函数的调用模式,包括了浅析JavaScript函数的调用模式的使用技巧和注意事项,需要的朋友参考一下 我们说一个函数的调用模式是作为一个函数来调用,是要与其它三种调用模式做区分 函数其他的三种调用: 方法调用模式,构造器调用模式,apply/call调用模式。  方法的调用模式:  构造器的调用:  apply/call调用模式:  这里如果没有显性的retu

  • 更改画笔大小和钢笔压力的不透明度 如果您使用图形绘制绘图板(例如 Wacom® 绘图板),则可以通过钢笔压力、角度、旋转或光笔轮来控制绘画工具。 选择“画笔”、“铅笔” 或其他绘画工具。 在选项栏中,执行下列某个操作: 单击“绘图板压力控制大小”按钮。 单击“绘图板压力控制不透明度”按钮。 注意:选取“窗口”>“画笔”可访问根据钢笔压力而改变角度、流量、散布程度、纹理深度以及描边圆度的其他控制选项

  • 本文向大家介绍浅谈Java设计模式系列-装饰器模式,包括了浅谈Java设计模式系列-装饰器模式的使用技巧和注意事项,需要的朋友参考一下 一、概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能。 不同于适配器模式和桥接模式,装饰器模式涉及的是单方,和代理模式相同,而且目标必须是抽象的。 而实际上,装饰器模式和代理模式的实现方式基本一致,只在目标的存在上有些差别,这个后面我们具体讲