要求,用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里比较简单的能自己实现呢? - _ -!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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