【Java数字图像处理之Swing基础篇】Java绘制太极图

        提起用编程语言绘制图像,大多数人想到的估计都是Python,比较Python真的简单易用,但是Java作为一门极受欢迎的语言,当然也有它的图像处理API,比如绘制这个太极图用的就是Java2D,而且Java运行速度要比Python更快

先看效果

a3dd96254d2442d6890d3b56391fdd40.png

代码

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;

public class GraphicsDemo extends JFrame{
    public static void main(String[] args) {
        GraphicsDemo demo = new GraphicsDemo();
        demo.setVisible(true);//设置可见

    }
    
    public GraphicsDemo(){
        this.setSize(300,200);
        this.setTitle("Java绘制太极");
        JPanel panel = new JPanel(){
            @Override
            protected void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g;
                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);//打开抗锯齿
                Shape leftCircle = new Ellipse2D.Double(10,10,300,300);
                Shape rightCircle = new Ellipse2D.Double(10,10,300,300);
                Shape innerCircle1 = new Ellipse2D.Double(85,10,150,150);
                Shape innerCircle2 = new Ellipse2D.Double(85,160,150,150);
                Shape rectAngel1 = new Rectangle2D.Double(160,10,150,300);
                Shape rectAngel2 = new Rectangle2D.Double(10,10,150,300);

                Area left = new Area(leftCircle);
                Area right = new Area(rightCircle);

                Area area1 = new Area(rectAngel1);
                Area area2 = new Area(rectAngel2);

                left.subtract(area1);
                right.subtract(area2);

                Area inner1 = new Area(innerCircle1);
                Area inner2 = new Area(innerCircle2);

                left.add(inner1);
                right.add(inner2);

                right.subtract(inner1);

                Shape minorWhiteCircle = new Ellipse2D.Double(150,70,20,20);
                Shape minorBlackCircle = new Ellipse2D.Double(150,230,20,20);

                g2.setPaint(Color.WHITE);
                g2.fill(left);
                g2.setPaint(Color.BLACK);
                g2.fill(right);

                g2.fill(minorWhiteCircle);
                g2.setPaint(Color.WHITE);
                g2.fill(minorBlackCircle);

                g2.dispose();
            }
        };
        this.add(panel);//添加到当前
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭程序关闭,相当于System.exit
    }

}

 代码解析

JavaArea对图形的布尔操作如下

  1. Uion(+):保留两个图形的重叠部分
  2. Subtraction(-):从第一个图形中减去第二个部分的重叠部分
  3. Innersection(&):只保留两个图形的重叠部分
  4. Exclusion-or(^):保留两个图形的不重叠部分

代码中区域的划分参考

        建议看着代码自己理解比较好,或者直接拿去用

f683ea40eba24c7db6ab1fc7ac61e9e2.png

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让线程再跑一会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值