要求,用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 初学者 的一些疑问
- 关于byte数组存入文件的问题
- 占于流量的问题, 望高人解答
- 请问到哪里下载junit的源码?为什么下载junit3.8.2.zip 包中,无源码?
- 菜单不能正常显示!!
- 无法将 java.awt.Graphics 中的 getColor() 应用于 (java.awt.Color)
- 入门者如何学Java!请问老鸟们!~~~~~~正郁闷着的小P孩提问...
- 头疼的INFORMIX数据库连接问题
- ArrayList是不是一能存不同数据类型的数组?
- 比较难解决的问题,关于java application
- Java编程思想内部类继承中的一段代码问题
- 用Graphics2D 做 emf图片 我做了两天没做出来,高手赐教
楼主【xiaochongwei】截止到2008-07-10 19:29:35的历史汇总数据(不包括此帖):
发帖的总数量:1 发帖的总分数:50 每贴平均分数:50
回帖的总数量:0 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:0 结贴的总分数:0
无满意结贴数:0 无满意结贴分:0
未结的帖子数:1 未结的总分数:50
结贴的百分比:0.00 % 结分的百分比:0.00 %
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html