int imageWidth = 160; //模板的宽度 int imageHeight = 80; //模板的高度
int ply = 10; //饼图的厚度 int radius = 140; //饼图的半径 int x_coordinate = 10; //饼图的X坐标 int y_coordinate = 5; //饼图的Y坐标 int scale = 80; //饼图的比例尺 int rotation = -1; //饼图的旋转度 int ini_angle = 90; //扇形的初始角度
int columns; //*扇形的个数 int col_anglesize[]; //*扇形的大小 Color col_colors[]; //*扇形的颜色
drawOval(int x, int y, int width, int height);
drawPolygon(int xPoints[], int yPoints[], int nPoints);
drawRect(int x, int y, int width, int height);
drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight);
fill3DRect(int x, int y, int width, int height, boolean raised);
fillArc(int x,int y,int width,int height,int startAngle,int arcAngle);
fillOval(int x, int y, int width, int height);
fillPolygon(int xPoints[], int yPoints[], int nPoints);
fillRect(int x, int y, int width, int height);
fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight); 这些方法基本上一看便知:画直线、画椭圆、画多边形、画矩形、画圆角矩形等。
fill开头的方法是在画后还要填充颜色。
如果你想画圆,就用画椭圆的方法,让宽和高相等就行了。 ◆ 例 1.4.1 根据参数绘制直方图 这是一个简单的例子。间隔和标度都不是根据参数计算的(一个好的程序应能够自己计算这些数据,而不是生硬地指定)。下面是 HTM 文件:<html>
<head>
<title>bars</title>
</head>
<body>
<applet code=bars.class width=350 height=250 >
<param name=data1 value=440>
<param name=data2 value=520>
<param name=data3 value=400>
<param name=data4 value=680>
<param name=data5 value=320>
<param name=data6 value=600>
</applet>
</body>
</html>下面是 Java 文件:import java.applet.*;
import java.awt.*;
public class bars extends Applet
{
private int m_data[],i;
public bars()
{
}
public void init()
{
m_data=new int[6];
for(i=1;i<=6;i++)
{
m_data[i-1]=Integer.parseInt(getParameter("data"+i));
}
setBackground(Color.yellow);
}
public void paint(Graphics g)
{
g.drawString("XX车间XX产品上半年生产进度", 90, 20);
Color c=new Color(0x999999);
g.setColor(c);
g.drawRect(30,25,300,200);
for(i=0;i<=7;i++)
{
g.drawLine(30,50+i*25,330,50+i*25);
g.drawString(700-i*100+"",5,52+i*25);
}
g.setColor(Color.blue);
for(i=0;i<=12;i++)
{
g.fillRect(50+i*50,225-m_data[i]/4,15,m_data[i]/4);
g.drawString(m_data[i]+"",50+i*50,220-m_data[i]/4);
g.drawString(i+1+"月",50+i*50,240);
}
}
}
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
public class voteimageServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
String strFile = request.getRealPath("/app/block/vote/"+request.getParameter("filename"));
int i_init = 4;
String []get_parameter = new String[i_init+5];
get_parameter = getpicParameter(strFile,i_init+5); //从文件中获得投票数
response.setHeader("Cache-Control","no-store");
response.setDateHeader("Expires",0);
response.setContentType("image/jpeg");
int imageWidth = 160; //模板的宽度
int imageHeight = 80; //模板的高度
int ply = 10; //饼图的厚度
int radius = 140; //饼图的半径
int x_coordinate = 10; //饼图的X坐标
int y_coordinate = 5; //饼图的Y坐标
int scale = 80; //饼图的比例尺
int rotation = -1; //饼图的旋转度
int ini_angle = 90; //扇形的初始角度
int columns; //*扇形的个数
int col_anglesize[]; //*扇形的大小
Color col_colors[]; //*扇形的颜色
ServletOutputStream out=response.getOutputStream();
BufferedImage image=new BufferedImage(imageWidth,imageHeight,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//设置模板底色
//g.setColor(Color.yellow);
g.setColor(Color.decode("#fff2bb"));
//设置模板大小
g.fillRect(0,0,imageWidth,imageHeight);
//获得扇形的个数
columns = i_init;
col_anglesize = new int[columns];
col_colors = new Color[columns];
int []col_anglebegin = new int[columns];
//获得每个扇形角度的大小
float []temp_anglesize = new float[columns+1];
float []para_anglesize = new float[columns+1];
for(int i_tofloat=0;i_tofloat<columns;i_tofloat++ )
{ //String转换为float类型
para_anglesize[i_tofloat] = new java.lang.Integer(get_parameter[i_tofloat].trim()).floatValue();
}
temp_anglesize[columns] = 0;
float temp_total_anglesize = 0;
for(int i_anglesize=0;i_anglesize<columns;i_anglesize++)
{
temp_total_anglesize = temp_total_anglesize+para_anglesize[i_anglesize];
}
for(int j_anglesize=0;j_anglesize<columns-1;j_anglesize++)
{
if(temp_total_anglesize<=0){ break; }
temp_anglesize[j_anglesize] = (360*para_anglesize[j_anglesize])/temp_total_anglesize;
col_anglesize[j_anglesize] = (int)temp_anglesize[j_anglesize];
temp_anglesize[columns] = temp_anglesize[columns] + col_anglesize[j_anglesize];
}
col_anglesize[columns-1] = (int)(360 - temp_anglesize[columns]);
if(temp_total_anglesize<=0)
{
for(int k_anglesize=0;k_anglesize<columns;k_anglesize++)
{
col_anglesize[k_anglesize] = 0;
}
}
//获得每个扇形的初始角度
ini_angle = col_anglebegin[0];
for (int i_angle=1;i_angle<columns;i_angle++)
{
col_anglebegin[i_angle] = ini_angle + col_anglesize[i_angle-1];
ini_angle = col_anglebegin[i_angle];
}
//获得每个扇形的颜色
for(int i_color=0,j_color=5;i_color<columns;i_color++,j_color++)
{
if(get_parameter[j_color].equals("red")){ col_colors[i_color] = Color.red; }
else if(get_parameter[j_color].equals("green")) { col_colors[i_color] = Color.green; }
else if(get_parameter[j_color].equals("black")) { col_colors[i_color] = Color.black; }
else if(get_parameter[j_color].equals("pink")) { col_colors[i_color] = Color.pink; }
else if(get_parameter[j_color].equals("orange")) { col_colors[i_color] = Color.orange; }
else if(get_parameter[j_color].equals("magenta")) { col_colors[i_color] = Color.magenta; }
else if(get_parameter[j_color].equals("cyan")) { col_colors[i_color] = Color.cyan; }
else if(get_parameter[j_color].equals("white")) { col_colors[i_color] = Color.white; }
else if(get_parameter[j_color].equals("yellow")) { col_colors[i_color] = Color.yellow; }
else if(get_parameter[j_color].equals("blue")) { col_colors[i_color] = Color.blue; }
else if(get_parameter[j_color].equals("gray")) { col_colors[i_color] = Color.gray; }
else if(get_parameter[j_color].equals("darkGray")){ col_colors[i_color] = Color.darkGray;}
else { col_colors[i_color] = Color.gray; }
}
g.setColor(Color.red);
Font f = new Font("TimesRoman",Font.BOLD,20);
g.setFont(f);
for(int i_columns=0;i_columns<columns;i_columns++)
{
g.setColor((Color)((col_colors[i_columns]).darker()));
for(int i_ply=0;i_ply<ply;i_ply++)
{
g.drawArc(x_coordinate, y_coordinate+i_ply, radius, (int)((radius*45)/100) , col_anglebegin[i_columns], col_anglesize[i_columns]);
}
}
for(int i_fillcolumns = 0;i_fillcolumns<columns;i_fillcolumns++ )
{
g.setColor((Color)col_colors[i_fillcolumns]);
g.fillArc(x_coordinate, y_coordinate, radius, (int)((radius*45)/100), col_anglebegin[i_fillcolumns], col_anglesize[i_fillcolumns]);
}
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
doGet(request,response);
}
private String[] getpicParameter(String s,int para_init)
{
String[] strP = new String[para_init];
String strTemp = null;
int i;
java.io.RandomAccessFile rf = null;
try
{
rf = new java.io.RandomAccessFile(s,"r");
}
catch(Exception e)
{
System.out.println(e);
System.exit(0);
}
for(i=0;i<para_init;i++)
{
try
{
strTemp = rf.readLine();
}
catch(Exception e)
{
strTemp = "err_get";
}
if(strTemp==null)strTemp = "err_get";
strP[i] = strTemp;
}
return strP;
}
}