java画太极加图片_使用Java 2D绘制黑白太极图案
一:基本原理
利用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绘制黑白太极图案相关推荐
- java画太极加图片_通过Java 画一个太极图
package demo; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java. ...
- java画太极加图片_新手初学java 尝试编程绘画太极图
我是个新手,对java理解还不深入,看了些java方面的基础视频,自己尝试着把中国的古老的太极图给画出来,经过一些思考和动手,终于把太极图给绘画出来. 记得以前某位高手也画过类似的太极图,不过当时自己 ...
- java类如何加载_简述Java类加载方式及流程
在学习反射那一章节时想到自己之前学过的知识,故整理一番,希望能提供一点帮助,水平有限,如若有误欢迎指正. Java提供了两种类的装载方式.一是预先加载,二是按需加载.因为可以对类进行按需加载,所以程序 ...
- java读取mysql的图片_用JAVA写入和读取MYSQL的图片的实例
主要的程序: package greeds.jdbc.sample; import greeds.jdbc.util.JDBCUtil; import java.io.*; import java.s ...
- java 日期的加减_用java实现日期类的加减
Java代码 public class test1 { public static void main(String[] args) { Calendar c = Calendar.getInstan ...
- java集合的加减_在JAVA中,对List集合的加减操作
在日常Java开发中,经常会对List集合进行各种各样的操作,这里针对List集合的加减操作做个小的总结:在我看来最常用的有两个,一个是对原List本身有改变,一个是原List本身无改变. 一.对原L ...
- java窗体中添加图片_在java窗体程序中添加图片的方法
在java窗体程序中添加图片的方法 发布时间:2020-06-16 11:24:13 来源:亿速云 阅读:148 作者:Leah 这篇文章主要为大家详细介绍了在java窗体程序中添加图片的方法,图文详 ...
- java给界面加边框_使用Java原生Graphics2D给Activiti流程当前环节加上红色边框。
近期在在项目中用到了Activiti做流程管理,在当前环节中要求画上边框,最出使用的是CSS或JS的方式做的,可是后来发现IMG标签大小变了后,或者弹出页里面的流程图不一致导致边框错位.IE6和IE其 ...
- 使用Java 2D绘制黑白太极图案
一:基本原理 利用Java 2D的Area对象对绘制形状几何操作的支持,完成太极图案的绘制,使用Paint来 完成对不同颜色的填充.Java 2D图形API Area对Shape支持四种几何操作: - ...
- 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目
王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...
最新文章
- 关于开发WPF的一些感想
- c++调用c#写的DLL
- Spring Boot AOP记录用户操作日志
- 使用SSH反向隧道进行内网穿透
- Base64 加密字符串和文件
- python函数返回none_Python 函数默认返回None的原因
- Tomcat 中文路径乱码
- 绕过waf mysql爆库_sqlilab-Less-21-30-writeup
- 约瑟夫问题公式及代码实现
- Springboot使用FastJson后,接口返回中文乱码的问题解决。
- git 远程仓库回滚
- FATA[0000] (省略) Are you trying to connect to a TLS-enabled daemon without TLS?
- sqlserver 2016 安装
- 大数据工程师简历_大数据工程师简历专业技能怎么写
- 如何区别文本是BIG5还是GB?
- 有线异步通信原理_全光纤网络结构原理是什么 全光纤网络结构原理介绍【详解】...
- html5时间插件mui,移动端时间控件 HTML5+ 的 pickDate 和 MUI 的 dtpicker 的使用与对比...
- poj1265 皮克公式 求多边形面积(凹凸)
- 模拟行走机器人-c语言
- python 嵌入式webserver 服务器 状态监控
热门文章
- 单相Boost功率因数校正电路(PFC)设计与仿真(Simulink Saber):第二章 仿真模型搭建与控制参数整定
- lombok slfj 中_Lombok快速入门
- 南洋生活,聊聊新加坡的房地产
- NX1957在VS2019上二次开发的环境配置
- Python自学篇——快递分拣程序
- 肖特基二极管工作原理
- php.ini 验证码,php怎么解决验证码无法显示的问题
- The page at ‘xxx‘ was loaded over HTTPS, but requested an insecure resource ‘xxx‘.
- linux wa%过高,iostat查看io状况
- linux网桥中stp分析,linux网桥中stp分析