一:基本原理

利用Java 2D的Area对象对绘制形状几何操作的支持,完成太极图案的绘制,使用Paint来

完成对不同颜色的填充。Java 2D图形API Area对Shape支持四种几何操作:

-         Add (加)- 保留两个几何形状及其重叠部分

-         Subtract (减) – 从第一个几何形状上减去和第二个重叠的部分,保留减去之后的第一个几

何形状

-         Intersect (与) – 只保留两个几何形状重叠的部分。

-         ExclusiveOr(或) – 保留他们相互不重叠的部分。

参看下图:

二:程序运行效果

程序基于JDK6 API完成。

背景图片我是在网上找来的,可以自己替换的。

程序源代码如下:

package com.gloomyfish.swing;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.Shape;

import java.awt.geom.Area;

import java.awt.geom.Ellipse2D;

import java.awt.geom.Rectangle2D;

import java.awt.image.BufferedImage;

import java.io.File;

import javax.imageio.ImageIO;

import javax.swing.JComponent;

import javax.swing.JFrame;

public class YingYangGraphics extends JComponent {

/**

*

*/

private static final long serialVersionUID = 8812325148970066491L;

private BufferedImage image = null;

public YingYangGraphics() {

super();

this.setOpaque(false);

}

protected void paintComponent(Graphics g) {

Graphics2D g2 = (Graphics2D)g;

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g2.drawImage(getImage(), 0, 0, image.getWidth(), image.getHeight(), null);

Shape lefthalfCirle = new Ellipse2D.Double(10,10, 300,300); // R = 150

Shape righthalfCircle = new Ellipse2D.Double(10,10, 300,300); // R = 150

Shape innerCircle1 = new Ellipse2D.Double(85,10, 150,150); // R/2 = 75

Shape innerCircle2 = new Ellipse2D.Double(85,160, 150,150); // R = 150

Shape rectangel1 = new Rectangle2D.Double(160, 10, 150, 300);

Shape rectangel2 = new Rectangle2D.Double(10, 10, 150, 300);

Area left = new Area(lefthalfCirle);

Area right = new Area(righthalfCircle);

Area area11 = new Area(rectangel1);

Area area22 = new Area(rectangel2);

left.subtract(area11);

right.subtract(area22);

Area inner1 = new Area(innerCircle1);

Area inner2 = new Area(innerCircle2);

left.add(inner1);

//left.subtract(inner2);

right.add(inner2);

right.subtract(inner1); // trick is here !!!

// create minor circle here!!!

Shape minorWhiteCircle = new Ellipse2D.Double(150,70, 20,20); // ++ 60

Shape innerBlackCircle = new Ellipse2D.Double(150,230, 20,20); // R = 150

// draw two big frame shape here...

g2.setPaint(Color.WHITE);

g2.fill(left);

g2.setPaint(Color.BLACK);

g2.fill(right);

// draw minor circle here!!!

g2.fill(minorWhiteCircle);

g2.setPaint(Color.WHITE);

g2.fill(innerBlackCircle);

}

private BufferedImage getImage() {

if(image != null) {

return image;

}

try {

File file = new File("D:\\android\\blue_flower.jpg");

image = ImageIO.read(file);

} catch (Exception e) {

e.printStackTrace();

}

return image;

}

public static void main(String[] args) {

JFrame frame = new JFrame("Test Panel");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.getContentPane().setLayout(new BorderLayout());

// Display the window.

frame.getContentPane().add(new YingYangGraphics(), BorderLayout.CENTER);

frame.setPreferredSize(new Dimension(330,350));

frame.pack();

frame.setVisible(true);

}

}

java画太极加图片_使用Java 2D绘制黑白太极图案相关推荐

  1. java画太极加图片_通过Java 画一个太极图

    package demo; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java. ...

  2. java画太极加图片_新手初学java 尝试编程绘画太极图

    我是个新手,对java理解还不深入,看了些java方面的基础视频,自己尝试着把中国的古老的太极图给画出来,经过一些思考和动手,终于把太极图给绘画出来. 记得以前某位高手也画过类似的太极图,不过当时自己 ...

  3. java类如何加载_简述Java类加载方式及流程

    在学习反射那一章节时想到自己之前学过的知识,故整理一番,希望能提供一点帮助,水平有限,如若有误欢迎指正. Java提供了两种类的装载方式.一是预先加载,二是按需加载.因为可以对类进行按需加载,所以程序 ...

  4. java读取mysql的图片_用JAVA写入和读取MYSQL的图片的实例

    主要的程序: package greeds.jdbc.sample; import greeds.jdbc.util.JDBCUtil; import java.io.*; import java.s ...

  5. java 日期的加减_用java实现日期类的加减

    Java代码 public class test1 { public static void main(String[] args) { Calendar c = Calendar.getInstan ...

  6. java集合的加减_在JAVA中,对List集合的加减操作

    在日常Java开发中,经常会对List集合进行各种各样的操作,这里针对List集合的加减操作做个小的总结:在我看来最常用的有两个,一个是对原List本身有改变,一个是原List本身无改变. 一.对原L ...

  7. java窗体中添加图片_在java窗体程序中添加图片的方法

    在java窗体程序中添加图片的方法 发布时间:2020-06-16 11:24:13 来源:亿速云 阅读:148 作者:Leah 这篇文章主要为大家详细介绍了在java窗体程序中添加图片的方法,图文详 ...

  8. java给界面加边框_使用Java原生Graphics2D给Activiti流程当前环节加上红色边框。

    近期在在项目中用到了Activiti做流程管理,在当前环节中要求画上边框,最出使用的是CSS或JS的方式做的,可是后来发现IMG标签大小变了后,或者弹出页里面的流程图不一致导致边框错位.IE6和IE其 ...

  9. 使用Java 2D绘制黑白太极图案

    一:基本原理 利用Java 2D的Area对象对绘制形状几何操作的支持,完成太极图案的绘制,使用Paint来 完成对不同颜色的填充.Java 2D图形API Area对Shape支持四种几何操作: - ...

  10. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

最新文章

  1. Android监视返回键
  2. 一个aov网用邻接矩阵表示_关注讲述我和朱婷7年7个故事,见证一个明星代表的诞生...
  3. 分布式服务框架dubbo原理解析 转
  4. 简单的文本设计就能影响游戏体验?游戏中提升玩家体验的小设计
  5. EM算法(Expectation Maximization Algorithm)
  6. tcs标准编写软件_【公益培训】知你所需 | 标准编写格式及TCS模板应用线上公益培训...
  7. Linux 命令(100)—— expr 命令
  8. 获取完整拼音中包含拼音的个数
  9. oppo手机解锁_OPPO手机忘记解锁密码怎么办 解锁手机密码
  10. openwrt路由器-timeout while waiting for PADS.
  11. PyTorch中文教程 | (11) 聊天机器人教程
  12. 基于sklearn实现Bagging算法(python)
  13. 学编程好比学游泳——欠炼
  14. 【golang】golang使用cmd去ping网址在window和linux的区别
  15. 卧室阳台装修的实用建议分享,极家家居装修怎么样
  16. Autodesk 3ds Max 2023安装图文教程
  17. java excel 多列排序,《excel表格调取行和列的数据》 excel列排序的时候怎么让所有行的信息跟着排(其它的非数据行)...
  18. rtsp流php播放插件,nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
  19. KNN分类法与手势识别
  20. 2021遥感应用组三等奖:基于PolSAR和高光谱遥感的黄河口湿地协同分类研究

热门文章

  1. Blast2GO使用方法详解(命令界面
  2. word替换妙用小技巧:批量去除多余空格、空行、换行
  3. 在Python中安装meta模块
  4. mysql左连接查询时多条件的注意事项
  5. MyEclipse 安装教程
  6. 【学习笔记】傅里叶变换: 方形函数,三角函数
  7. php fpm.conf 注释,php 中 php-fpm.conf
  8. 今日睡眠质量记录74
  9. 【渝粤教育】 国家开放大学2020年春季 1054流通概论 参考试题
  10. 恒流源差分放大电路静态分析_差分放大电路常见的形式