如何在应用程序中画简单图形?
我是指在应用程序中,不是在applet中!比如说画个矩形。
另外还问一个问题,如果上面的问题解决了的话,我想问,我如何才能把上面我所画的图形存成jpg图形放在硬盘里?
谢谢!
问题点数:50、回复次数:8Top
1 楼yangl79(杨)回复于 2004-05-03 20:51:52 得分 0
请介绍一些相关的类,谢谢。Top
2 楼yangl79(杨)回复于 2004-05-05 19:05:23 得分 0
我这个问题这么没水平吗?Top
3 楼listening(zqy)回复于 2004-05-05 19:33:11 得分 50
<%@ page contentType="text/html; charset=GBK" %>
<%@page import="java.io.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>
<%@page import="java.awt.*"%>
<%@page import="java.awt.image.*"%>
<%@page import="java.awt.geom.*"%>
<%@page import="com.sun.image.codec.jpeg.*"%>
<html>
<head>
<title>
Draw
</title>
</head>
<body bgcolor="#ffffff">
<%
int WIDTH=500;
int HEIGHT=600;
try {
response.setContentType("image/jpeg");
ServletOutputStream out1 = response.getOutputStream();
// create a proper size Frame object
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
// draw the graph onto the image
g2.setColor(Color.white);
g2.fillRect(0,0,WIDTH,HEIGHT);
g2.setColor(Color.red);
g2.drawRect(0,0,WIDTH-1,HEIGHT-1);
float x,y;
double a;
g2.setColor(Color.red);
g2.translate(200,200);
GeneralPath path=new GeneralPath();
for(x=-180;x<=180;x+=1)
{
a=Math.sin(x*Math. PI/180);
y=(float)(40*a);
if(x==-180)
path.moveTo(x,y);
else
path.lineTo(x,y);
}
g2.draw(path);
g2.setColor(Color.blue);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
GeneralPath path2=new GeneralPath();
for(x=-180;x<=180;x+=1)
{
a=Math.sin(x*Math. PI/180);
y=(float)(40*a);
if(x==-180)
path2.moveTo(x,y);
else
path2.lineTo(x,y);
}
float[] dashPattern= { 10, 10, 10, 10, 10, 10, 30, 10, 30};
BasicStroke stroke=new BasicStroke(10.0f,BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 10.0F /* miter limit */,
dashPattern, 0 /* dash phase */
);
g2.setStroke(stroke);
g2.rotate(-Math.PI/2);
g2.draw(path2);
g2.rotate(Math.PI/2);
g2.draw(path);
g2.drawString("This is the Test!",100,100);
g2.rotate(-Math.PI/2,100,100);
g2.drawString("This is the Test!",100,100);
g2.rotate(Math.PI/2,100,100);
/*
File f=new File("E:\\MyProject\\Java\\jbproject\\Standard\\test.jpg");
BufferedImage image1 = javax.imageio.ImageIO.read(f);
g2.drawImage(image1,null,0,0);
int rule = AlphaComposite.SRC_OVER;
float alpha = 0.5f;
g2.setComposite(AlphaComposite.getInstance(rule, alpha));
File f2=new File("E:\\MyProject\\Java\\jbproject\\Standard\\test2.jpg");
BufferedImage image2 = javax.imageio.ImageIO.read(f2);
g2.drawImage(image2,null,0,0);
*/
// encode the output back to the client
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out1);
encoder.encode(image);
out1.flush();
} catch (Exception e) {
e.printStackTrace();
}
%>
</body>
</html>
Top
4 楼listening(zqy)回复于 2004-05-05 19:34:11 得分 0
我的一个测试的例子,没修改就放上了。原理很简单。Top
5 楼panpan221(我是来学习的!)回复于 2004-05-05 20:36:30 得分 0
新手学习,关注Top
6 楼yangl79(杨)回复于 2004-05-05 21:29:39 得分 0
我运行怎么没有结果啊,在哪运行?Top
7 楼sensitive(左右为难)回复于 2004-05-05 21:50:38 得分 0
相关的类,
java.awt.Graphics;
java.awt.Graphics2D;
java.awt.Geom.*;(里面都是2D图形类,包括矩形,直线,多边形,椭圆等)
先建一个JFrame和JPanel,在JPanel里面重载paint() 或者paintComponent()方法,再调用Graphics2D的draw(Shape s)应该就可以画了,具体实现不难,很多书上都有啊,想Core java
卷1,2 至于生成jpg,忘了,查查书再说吧,偶是新手。Top
8 楼listening(zqy)回复于 2004-05-05 22:45:01 得分 0
这是一个JSP文件,我在JBuilder里面调试通过了。你慢慢研究研究。
可以把中间对Graphics的很多操作删除掉,那些有的是画正弦函数和字符串旋转灯的操作,没有用的。
原理就是生成Jpg文件,然后传到客户端。Top





