首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA读取EMF资料并转化为PNG,JPG,GIF格式

2012-11-26 
JAVA读取EMF文件并转化为PNG,JPG,GIF格式JAVA读取EMF文件并转化为PNG,JPG,GIF式使用第三方库下载地址为:ht

JAVA读取EMF文件并转化为PNG,JPG,GIF格式

JAVA读取EMF文件并转化为PNG,JPG,GIF格式

使用第三方库下载地址为:http://java.freehep.org/vectorgraphics/index.html

主要思路:

使用EMFInputStream读取EMF文件,然后使用EMFRenderer对象将EMF绘制到创建

好的空白的BufferedImage里面。这样就把EMF图片转化为Java中的BufferedImage对

象,然后可以重新保存为Java 2D支持图像格式如PNG或者JPG等。

代码如下:

import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JFrame;import javax.swing.JPanel;import org.freehep.graphicsio.emf.EMFInputStream;import org.freehep.graphicsio.emf.EMFRenderer;/** * download the third-party libraries here: * http://java.freehep.org/vectorgraphics/index.html *  * @author gloomyfish * */public class EMFReader {public static void main(String[] args) {try {EMFInputStream inputStream = new EMFInputStream(new FileInputStream("D:\\export.emf"), EMFInputStream.DEFAULT_VERSION);System.out.println("height = " + inputStream.readHeader().getBounds().getHeight());System.out.println("widht = " + inputStream.readHeader().getBounds().getWidth());// headerInfo of bitmap API always tell a lie, could not get // correct width and height// BitmapInfoHeader headerInfo = new BitmapInfoHeader(inputStream);// System.out.println("Big Error on reading emf format picture");EMFRenderer emfRenderer = new EMFRenderer(inputStream);// create buffered image object from EMF render    final int width = (int)inputStream.readHeader().getBounds().getWidth();    final int height = (int)inputStream.readHeader().getBounds().getHeight();    System.out.println("widht = " + width + " and height = " + height);    final BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);    Graphics2D g2 = (Graphics2D)result.createGraphics();    emfRenderer.paint(g2);        // write it as png/jpg/gif, up to you!!!    File outputfile = new File("D:\\result.png");    ImageIO.write(result, "png", outputfile);    // display it    JPanel resultPanel = new JPanel() {    /** *  */private static final long serialVersionUID = 1L;public void paintComponent(Graphics g) {super.paintChildren(g);Graphics2D g2 = (Graphics2D)g;g2.drawImage(result, 0, 0, width, height, null);    }    };    JFrame ui = new JFrame("EMF Reader");    ui.getContentPane().setLayout(new BorderLayout());    ui.getContentPane().add(resultPanel, BorderLayout.CENTER);    ui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    ui.setSize(new Dimension(width+20, height+40));    ui.setVisible(true);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

热点排行