使用Java 2D绘制黑白太极图案
2011-12-27 13:34
645 查看
一:基本原理
利用Java 2D的Area对象对绘制形状几何操作的支持,完成太极图案的绘制,使用Paint来
完成对不同颜色的填充。Java 2D图形API Area对Shape支持四种几何操作:
- Add (加)- 保留两个几何形状及其重叠部分
- Subtract (减) – 从第一个几何形状上减去和第二个重叠的部分,保留减去之后的第一个几
何形状
- Intersect (与) – 只保留两个几何形状重叠的部分。
- ExclusiveOr(或) – 保留他们相互不重叠的部分。
参看下图:
二:程序运行效果
程序基于JDK6 API完成。
背景图片我是在网上找来的,可以自己替换的。
程序源代码如下:
利用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 2D绘制黑白太极图案
- 使用Java 2D绘制黑白太极图案
- 使用Java2D改善API的绘制效果
- 使用Java2D改善API的绘制效果
- java2D使用(2)-->使用Servlet生成JPEG图像
- Java 绘图: 使用 Graphics 类绘制线段、矩形、椭圆/圆弧/扇形、图片、文本
- 使用java绘图类Graphics绘制圆圈
- HTML5 Canvas组件绘制太极图案
- Quartz2D使用之基本图形绘制(一)
- Quartz2d从易到难全解析---贝塞尔曲线的绘制、上下文栈的概念、矩阵转换的使用
- Android使用Canvas绘制2D图形基础
- Android 中使用OpenGL ES进行2D开发(绘制第一个三角形)
- 使用CSS3来绘制一个月食图案
- 使用quartz2D绘制阴影的代码
- 在Java中使用JGraph实现图形绘制
- 使用JFreeChart绘制2D饼图图片
- 使用 Java 2D API 制作艺术动画
- 使用循环语句绘制图案-1
- CSS3绘制旋转的太极图案(一)
- 使用java绘制希尔伯特曲线(hilbert curve)