用java画爱心图_用java实现 图片组成心形图案

这篇博客通过Java编程实现了一个心形图案,使用多个图片拼接成一个爱心形状。通过调整数学公式,精确控制图片在心形路径上的位置,展示了Java在图形处理方面的应用。
摘要由CSDN通过智能技术生成

灵感:java2核心技术卷1(共两卷)

最近在看java2核心技术里面提到显示图片,于是就做了个心形图片组合图案。。。你懂得

import java.awt.*;

import java.awt.geom.*;

import java.awt.geom.Point2D.Double;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import javax.imageio.ImageIO;

import javax.swing.*;

public class DrawTest

{

public static void main(String[] args)

{

DrawFrame frame = new DrawFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

/**

A frame that contains a panel with drawings

*/

class DrawFrame extends JFrame

{

public DrawFrame()

{

setTitle("DrawTest");

setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

// add panel to frame

DrawPanel panel = new DrawPanel();

add(panel);

}

public static final int DEFAULT_WIDTH = 1000;

public static final int DEFAULT_HEIGHT =1000;

}

/**

A panel that displays rectangles and ellipses.

*/

class DrawPanel extends JPanel

{

private ArrayList image;

DrawPanel(){

try

{

image = new ArrayList();

String[] s =

{ "图片1地址",

"图片2地址",

"图片3地址"

};

System.out.println(s[0]);

System.out.println(s[1]);

System.out.println(s[2]);

image.add(ImageIO.read(new File(s[0])));

image.add(ImageIO.read(new File(s[1])));

image.add(ImageIO.read(new File(s[2])));

}

catch (IOException e)

{

e.printStackTrace();

}

}

public void paintComponent(Graphics g)

{

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

//love

//

// double theta=0.00 ;

// double offset = 0.0001;

// double x;

// double y;

// Point2D prePoint = new Point2D.Double(0,0);

// Point2D point = new Point2D.Double( 0, 0);

// x= 500-20*(16*Math.pow(Math.sin(theta),3));

// y= 500-20*(

// 13*Math.cos(theta)-5*Math.cos(2*theta)-2*Math.cos(3*theta)-Math.cos(4*theta) );

// prePoint.setLocation(x, y);

//

// for( ;theta< 2*Math.PI;theta+= offset ){

// x= 500-20*(16*Math.pow(Math.sin(theta),3));

// y= 500-20*(

// 13*Math.cos(theta)-5*Math.cos(2*theta)-2*Math.cos(3*theta)-Math.cos(4*theta) );

// point.setLocation(x, y);

// Line2D line = new Line2D.Double(point, prePoint);

// g2.draw( line );

// prePoint.setLocation(point);

// }//end love

// love filled with image

if (image.isEmpty()) return ;

int imageHeight = image.get(0).getHeight(this);

int imageWidth = image.get(0).getWidth(this);

System.out.println( imageHeight+" "+imageWidth);

double theta=0.00 ;

double offset = 0.06;

double x;

double y;

int nth=0;

Point2D prePoint = new Point2D.Double(0,0);

Point2D point = new Point2D.Double( 0, 0);

x= 450-25*(16*Math.pow(Math.sin(theta),3));

y= 400-25*(

13*Math.cos(theta)-5*Math.cos(2*theta)-2*Math.cos(3*theta)-Math.cos(4*theta) );

prePoint.setLocation(x, y);

g.drawImage(image.get(nth++), (int)x, (int)y, null);

for( ;theta< 2*Math.PI;theta+= offset ){

x= 450-25*(16*Math.pow(Math.sin(theta),3));

y= 400-25*(

13*Math.cos(theta)-5*Math.cos(2*theta)-2*Math.cos(3*theta)-Math.cos(4*theta) );

point.setLocation(x, y);

Line2D line = new Line2D.Double(point, prePoint);

// g2.draw( line );

if(nth == 3) nth %=3;

g2.drawImage(image.get(nth++),(int)x,(int)y,null);

prePoint.setLocation(point);

}//end love filled with imag

}

}

因涉及个人隐私故把图片匿了,运行不了请及时评论。

谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值