package at;
import java.io.*;
import com.sun.image.codec.jpeg.*;
import java.util.*;
import java.awt.geom.Arc2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.*;
import java.awt.*;
public class JIamge {
BufferedImage image;
private int dia=240;//设置饼图透明度
private Color c1=new Color(0,255,0,dia);
private Color c2=new Color(255,255,0,dia);
private Color c3=new Color(255,0,0,dia);
private Color c4=new Color(255,128,64,dia);
private Color c5=new Color(255,128,255,dia);
private Color c6=new Color(255,0,128,dia);
private Color c7=new Color(233,124,24,dia);
private Color c8=new Color(204,119,115,dia);
private Color c9=new Color(89,159,230,dia);
private Color c10=new Color(148,140,179,dia);
private Color c11=new Color(128,0,64,dia);
private Color c12=new Color(174,197,208,dia);
private Color colors[]={c1,c2,c3,c12,c11,c6,c4,c8,c9,c10,c5,c7};
Rectangle RectofChart = new Rectangle();
public void createImage(String fileLocation)
{
try
{
FileOutputStream fos = new FileOutputStream(fileLocation);
BufferedOutputStream bos = new BufferedOutputStream(fos);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
encoder.encode(image);
bos.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
public void graphicsGeneration(int xpdata[],String punit[],int xcdata[],String cunit[],int hpdata[],String hpunit[],int hcdata[],String hcunit[],String title)
{
int imageWidth = 1280;//图片的宽度
int imageHeight =1280;//图片的高度
int xpsum = 0; //省委项目总数
int xcsum = 0; //市委项目总数
int hpsum = 0; //省委合同总数
int hcsum = 0; //市委合同总数
int start = 0;
String percent[]=new String[xpdata.length]; //每个数据所占百分比
int radian[]=new int[xpdata.length]; //每个数据所对应的弧度数
for(int a=0;a<xpdata.length;a++)
{
xpsum = xpdata[a]+xpsum; //省发改委的项目总数
}
for(int p=0;p<xpdata.length;p++)
{
if(((float)xpdata[p]/xpsum*100)<10)
{
percent[p]=String.valueOf((float)xpdata[p]/xpsum*100).substring(0,3)+"%";
}
else
{
percent[p]=String.valueOf((float)xpdata[p]/xpsum*100).substring(0,4)+"%"; //省发改委的项目百分比
}
}
for(int r=0;r<xpdata.length;r++)
{
radian[r]=Math.round((float)xpdata[r]/xpsum*360); //省 应转的角度
}
String cpercent[]=new String[xcdata.length]; //每个数据所占百分比
int cradian[]=new int[xcdata.length]; //每个数据所对应的弧度数
for(int b=0;b<xcdata.length;b++)
{
xcsum = xcdata[b]+xcsum; //市发的项目总数
}
for(int p=0;p<xcdata.length;p++)
{
if(((float)xcdata[p]/xcsum*100)<10)
{
cpercent[p]=String.valueOf((float)xcdata[p]/xcsum*100).substring(0,3)+"%"; //市发改委的项目百分比
}
else
{
cpercent[p]=String.valueOf((float)xcdata[p]/xcsum*100).substring(0,4)+"%"; //市发改委的项目百分比
}
}
for(int r=0;r<xcdata.length;r++)
{
cradian[r]=Math.round((float)xcdata[r]/xcsum*360); //市 应转的角度
}
//**************************************************************
String hpercent[]=new String[hpdata.length]; //每个数据所占百分比
int hradian[]=new int[hpdata.length];
for(int a=0;a<hpdata.length;a++)
{
hpsum = hpdata[a]+hpsum; //省发改委的合同总数
}
for(int p=0;p<hpdata.length;p++)
{
if(((float)hpdata[p]/hpsum*100)<10)
{
hpercent[p]=String.valueOf((float)hpdata[p]/hpsum*100).substring(0,3)+"%";
}
else
{
hpercent[p]=String.valueOf((float)hpdata[p]/hpsum*100).substring(0,4)+"%"; //省发改委的项目百分比
}
}
for(int r=0;r<hpdata.length;r++)
{
hradian[r]=Math.round((float)hpdata[r]/hpsum*360); //省 应转的角度
}
String hcpercent[]=new String[hcdata.length]; //每个数据所占百分比
int hcradian[]=new int[hcdata.length]; //每个数据所对应的弧度数
for(int b=0;b<hcdata.length;b++)
{
hcsum = hcdata[b]+hcsum; //市发的合同总数
}
for(int p=0;p<hcdata.length;p++)
{
if(((float)hcdata[p]/hcsum*100)<10)
{
hcpercent[p]=String.valueOf((float)hcdata[p]/hcsum*100).substring(0,3)+"%"; //市发改委的项目百分比
}
else
{
hcpercent[p]=String.valueOf((float)hcdata[p]/hcsum*100).substring(0,4)+"%"; //市发改委的项目百分比
}
}
for(int r=0;r<hcdata.length;r++)
{
hcradian[r]=Math.round((float)hcdata[r]/hcsum*360); //市 应转的角度
}
//**********************************************************************
JIamge JIamge = new JIamge();
Arc2D arc = new Arc2D.Float(Arc2D.PIE);
JIamge.image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
Graphics graphics = JIamge.image.getGraphics();
Graphics2D g2=(Graphics2D)graphics;
graphics.setColor(Color.WHITE);
graphics.fillRect(0,0,imageWidth,imageHeight);
graphics.setColor(Color.DARK_GRAY);
RenderingHints hints = new RenderingHints(null);
hints.put(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHints(hints);
GradientPaint gradient=new GradientPaint(0,0,Color.white,0,1000,new Color(162,189,230),false);
g2.setPaint(gradient);
Rectangle2D rect=new Rectangle2D.Double(0,0,imageWidth,imageHeight);
g2.fill(rect);
g2.setColor(new Color(147,179,225));
g2.fill3DRect(0,0,1280,100,true);
g2.setFont(new Font("黑体",Font.BOLD,50));
g2.setColor(Color.black);
g2.drawString(title,(800/2)-(title.length()*15/2),60);
g2.setFont(new Font("黑体",Font.BOLD,30));
g2.drawString("省发改委", 40, 313);
g2.setColor(Color.BLUE);
g2.setColor(new Color(85,85,85,100));
g2.drawOval(260,200,280,200);
g2.fillOval(260,200,280,200);
g2.setColor(Color.black);
for(int j=0;j<xpdata.length;j++)
{
g2.setColor(colors[j]);
arc.setFrame(260,180,280,200);
arc.setAngleStart(start);
arc.setAngleExtent(radian[j]);
g2.fill(arc);
g2.draw(arc);
g2.setFont(new Font("宋体",Font.CENTER_BASELINE,18));
g2.setColor(Color.BLACK);
if(start+radian[j]<90)
{
double c=(start+radian[j]-radian[j]/2)*Math.PI/180;
int d2 = (int)(400+Math.cos(c)*150);
int d3 = (int)(300-Math.sin(c)*150);
g2.drawString(punit[j]+percent[j],d2,d3);
}
if(start+radian[j]>=90&&start+radian[j]<=180)
{
double c=(start+radian[j]-radian[j]/2)*Math.PI/180;
int d2 = (int)(400+Math.cos(c)*150);
int d3 = (int)(300-Math.sin(c)*150);
g2.drawString(punit[j]+percent[j],d2-70,d3);
}
if(start+radian[j]>=180&&start+radian[j]<=270)
{
double c=(start+radian[j]-radian[j]/2)*Math.PI/180;
int d2 = (int)(400+Math.cos(c)*150);
int d3 = (int)(300-Math.sin(c)*150);
g2.drawString(punit[j]+percent[j],d2-70,d3);
}
if(start+radian[j]>=270&&start+radian[j]<=380)
{
double c=(start+radian[j]-radian[j]/2)*Math.PI/180;
int d2 = (int)(400+Math.cos(c)*150);
int d3 = (int)(300-Math.sin(c)*150);
g2.drawString(punit[j]+percent[j],d2,d3);
}
start+=radian[j];
}
g2.setColor(Color.BLACK);
g2.setFont(new Font("黑体",Font.BOLD,30));
//*********************************省发改委
g2.setColor(Color.black);
g2.drawString("项目数量", 40, 650);
g2.setColor(Color.BLUE);
g2.setColor(new Color(85,85,85,100));
g2.drawOval(260,550,280,200);
g2.fillOval(260,550,280,200);
g2.setColor(Color.BLUE);
int csum = Math.round((float)xcsum/(xpsum+xcsum)*360);
int xsum = Math.round((float)xpsum/(xpsum+xcsum)*360);
g2.fillArc(260,530,280,200,0,xsum); //项目数量省委比例
double c=(xsum-xsum/2)*Math.PI/180;
int d2 = (int)(400+Math.cos(c)*150);
int d3 = (int)(650-Math.sin(c)*150);
String xpmax=String.valueOf((float)xpsum/(xpsum+xcsum)*100).substring(0,4)+"%";
g2.setColor(Color.BLACK);
g2.setFont(new Font("宋体",Font.CENTER_BASELINE,20));
g2.drawString("省发改委"+xpmax,d2,d3);
g2.setColor(Color.red);
g2.fillArc(260,530,280,200,xsum,csum); //项目数量市委比例
g2.setColor(Color.DARK_GRAY);
double c1=((xsum+csum)-(xsum+csum)/2)*Math.PI/180;
int d4 = (int)(400+Math.cos(c1)*150);
int d5 = (int)(65