要求,用java画饼图,出的图片格式是.emf(meta file)不许用任何开放代码 比如freehep。
我做出来的一个版本,图片扩展名是.emf,但其实图片还是jpeg的。
上代码 这是修改前的,没有生出圆,只是出了图片。
//生成图片的 Java Bean
//日期:2001-08-24
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Arc2D;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;public class ChartGraphics { BufferedImage image; public static void main(String[] args) { ChartGraphics a = new ChartGraphics();
a.graphicAsGeneration(1, 1, 1, 1, 1); } 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 e) {
System.out.println(e);
}
} public void graphicsGeneration(int h1, int h2, int h3, int h4, int h5) { final int X = 10;
int imageWidth = 300;// 图片的宽度
int imageHeight = 300;// 图片的高度
ChartGraphics chartGraphics = new ChartGraphics();
chartGraphics.image = new BufferedImage(imageWidth, imageHeight,
BufferedImage.TYPE_INT_RGB);
Graphics graphics = chartGraphics.image.getGraphics();
Font objFont = new Font("TimesRoman", Font.BOLD + Font.ITALIC, 28); Graphics2D graphics1 = (Graphics2D) graphics;
graphics1.setColor(Color.white);
graphics1.fillRect(0, 0, imageWidth, imageHeight);
graphics1.setColor(Color.red);
graphics1.fillOval(1, 8, 50, 100);
graphics1.setFont(objFont);
graphics1.drawString("23232", 80, 300);
graphics1.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Arc2D openArc = new Arc2D.Float(100, 100, 50, 100, 0, 180, Arc2D.OPEN);
openArc.setAngleExtent(175);
graphics1.fill(openArc); graphics1.setColor(Color.blue);
;
graphics1.drawString("666666666666", 20, 80); Ellipse2D e = new Ellipse2D.Double();
e.setFrameFromCenter(50, 50, 70 + 10, 70 + 10);
graphics1.draw(e); graphics1.draw(new Arc2D.Double(40, 50, 100, 50, 0, 60, Arc2D.OPEN));
graphics1.draw(new Arc2D.Double(40, 50, 100, 50, 120, 60, Arc2D.OPEN));
graphics1.draw(new Arc2D.Double(40, 50, 100, 50, 240, 60, Arc2D.OPEN)); chartGraphics.createImage("D:\\ok.emf"); }
} 问题就出在下面这两句话
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
encoder.encode(image);
出的图片还是JPEG,有没有什么方法能做到类似的Encoder,用于.emf文件呢。 我查了一下,在java里好像非常难实现,除了用freehep。
哪个高手赐教下,怎么在java里比较简单的能自己实现呢? - _ -!
我做出来的一个版本,图片扩展名是.emf,但其实图片还是jpeg的。
上代码 这是修改前的,没有生出圆,只是出了图片。
//生成图片的 Java Bean
//日期:2001-08-24
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Arc2D;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;public class ChartGraphics { BufferedImage image; public static void main(String[] args) { ChartGraphics a = new ChartGraphics();
a.graphicAsGeneration(1, 1, 1, 1, 1); } 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 e) {
System.out.println(e);
}
} public void graphicsGeneration(int h1, int h2, int h3, int h4, int h5) { final int X = 10;
int imageWidth = 300;// 图片的宽度
int imageHeight = 300;// 图片的高度
ChartGraphics chartGraphics = new ChartGraphics();
chartGraphics.image = new BufferedImage(imageWidth, imageHeight,
BufferedImage.TYPE_INT_RGB);
Graphics graphics = chartGraphics.image.getGraphics();
Font objFont = new Font("TimesRoman", Font.BOLD + Font.ITALIC, 28); Graphics2D graphics1 = (Graphics2D) graphics;
graphics1.setColor(Color.white);
graphics1.fillRect(0, 0, imageWidth, imageHeight);
graphics1.setColor(Color.red);
graphics1.fillOval(1, 8, 50, 100);
graphics1.setFont(objFont);
graphics1.drawString("23232", 80, 300);
graphics1.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Arc2D openArc = new Arc2D.Float(100, 100, 50, 100, 0, 180, Arc2D.OPEN);
openArc.setAngleExtent(175);
graphics1.fill(openArc); graphics1.setColor(Color.blue);
;
graphics1.drawString("666666666666", 20, 80); Ellipse2D e = new Ellipse2D.Double();
e.setFrameFromCenter(50, 50, 70 + 10, 70 + 10);
graphics1.draw(e); graphics1.draw(new Arc2D.Double(40, 50, 100, 50, 0, 60, Arc2D.OPEN));
graphics1.draw(new Arc2D.Double(40, 50, 100, 50, 120, 60, Arc2D.OPEN));
graphics1.draw(new Arc2D.Double(40, 50, 100, 50, 240, 60, Arc2D.OPEN)); chartGraphics.createImage("D:\\ok.emf"); }
} 问题就出在下面这两句话
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
encoder.encode(image);
出的图片还是JPEG,有没有什么方法能做到类似的Encoder,用于.emf文件呢。 我查了一下,在java里好像非常难实现,除了用freehep。
哪个高手赐教下,怎么在java里比较简单的能自己实现呢? - _ -!
做图的话还是别用JAVA了用PHOTOSHOP
你要喜欢做3D就用MAYA