java 风玫瑰图

由于项目的需要,需要一个风玫瑰图来描述风向。
画风玫瑰图的步骤如下:
1.创建一个BufferedImage ,设置它的宽度X和高度Y。
 
BufferedImage bi =new BufferedImage(chart.getX(), chart.getY(),
				BufferedImage.TYPE_INT_BGR);

2.创建Graphics2D g;
g = (Graphics2D) bi.getGraphics();
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, chart.getX(), chart.getY());
//用白色做背景填充整个画布。
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,				RenderingHints.VALUE_ANTIALIAS_ON); 
	g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,				RenderingHints.VALUE_STROKE_DEFAULT);
//这里是消除画图的锯齿.

3.画直线。
public void drawLine(int x1, int y1, int x2, int y2, Color color) {
		g.setColor(color);//设置直线的颜色
		g.drawLine(x1, y1, x2, y2);
	}

4.画三角形
public void drawPolygon(int[] xPoints, int[] yPoints, Color fillColor,
			Color lineColor) {
		g.setColor(fillColor);
		g.fillPolygon(xPoints, yPoints, 3);//填充
		g.setColor(lineColor);
		g.drawPolygon(xPoints, yPoints, 3);
	}

这里xPoints是三个点的横坐标,与之对应的是yPoints,是三个点的纵坐标
5.添加描述
public void drawString(int x, int y, String str, Color c) {
		g.setColor(c);
		g.drawString(str, x, y);// x,y为str的坐标
	}

6. 重点:确定每个点要画多少个像素。描述:如:1年内东北风12次,东风3次,XX风X次,从这些次数中获取最大值,比如最大为12,那么根据原点坐标(画布x/2,画布y/2)这2个坐标中选取最小值,来除以12,获得每个点画的像素
7.这个图是16个方位图,那么16个方位的最顶点坐标要分别计入数组中,如东东南方向的最顶点坐标(300,300);那么就是 int[] een = {300,300};
8.根据16个方位的最顶点坐标来画三角形和直线。
具体是这样的: 正北(最高点),原点,东北北,这三个方位最高点画三角形,填充颜色红色。东北,原点,东东北 三个最高点画三角形,填充红色,东北北,原点,东北画三角形 ,填充白色,这里是第一区间的的,其他几个区间以此类推。见我上传的附件图片中表示方法。
9.保存图片到文件中,如C:\a.jpg
try {
			FileOutputStream out = new FileOutputStream("C://a.jpg");
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(w.bi);//这里w.bi即为BufferedImage
			param.setQuality(1.0f, false);
			encoder.setJPEGEncodeParam(param);
			encoder.encode(w.bi);
			out.flush();
			out.close();
		} catch (Exception EE) {
			System.out.println(EE);
		}

10.通过servlet展示
	ImageIO.write(pro.getChart().getBi(), "JPEG", response
				.getOutputStream());
//这里pro.getChart().getBi(),即为BufferedImage


先写到这吧!java画图是一个体力活!需要耐心。
可能写得不详细,仅供参考。

你可能感兴趣的:(java,C++,c,servlet,C#)