用Java打印BufferedImage

有谁知道如何用Java打印BufferedImage?

打印就像在屏幕上绘图一样,所以最终你得到一个Graphics对象,你只需将imageImage放入其中。

我不确定你的印刷是什么意思。 在打印机上打印? 打印到标准输出? 写入文件?

您可以从sun查看本教程。 如果您要写入文件。 在您喜欢的图像工具中打开并从那里打印。

http://download.oracle.com/javase/tutorial/2d/images/saveimage.html

如果你正在构建一个图形应用程序并使用类似AWT的东西,你可以使用java打印API,这可能需要一些踢踏舞。

我试图通过扩展BufferedImage来实现这样的Printable接口(我在网络上找到的代码拼贴):

package components; import java.awt.image.PixelGrabber; import javax.swing.*; import java.io.*; import java.awt.*; import java.applet.Applet; import javax.imageio.*; import java.awt.Image.*; import java.awt.image.BufferedImage; import java.awt.image.ImageObserver; import java.net.*; import java.lang.*; import java.io.*; import java.io.File; import java.lang.Integer; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.RenderingHints; import java.lang.String; import java.io.File; import java.util.Iterator; import javax.imageio.*; import javax.imageio.stream.*; import java.lang.ClassLoader.*; import java.lang.Class; import java.io.*; import javax.print.*; import javax.print.attribute.*; import javax.print.attribute.standard.*; import javax.print.attribute.standard.MediaSize.*; import javax.print.event.*; import java.awt.MediaTracker; import java.awt.Color; import java.awt.*; import java.awt.print.*; import javax.print.attribute.*; import javax.swing.UIManager; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; import java.util.Hashtable; import java.awt.image.IndexColorModel; import java.awt.print.Printable.*; import java.awt.Rectangle; import java.awt.Graphics2D; public class printableBufferedImage extends BufferedImage implements Printable { public printableBufferedImage(ColorModel cm, WritableRaster raster, boolean isRasterPremultiplied, Hashtable properties) { super(cm, raster, isRasterPremultiplied, properties); } public printableBufferedImage(int width, int height, int imageType) { super(width, height, imageType); } public printableBufferedImage(int width, int height, int imageType, IndexColorModel cm) { super(width, height, imageType, cm); } public int print(Graphics g, PageFormat pf, int page) throws PrinterException { Graphics2D g2d = (Graphics2D) g; if (page > 0) { /* We have only one page, and 'page' is zero-based */ return NO_SUCH_PAGE; } /* User (0,0) is typically outside the imageable area, so we must * translate by the X and Y values in the PageFormat to avoid clipping */ try { g2d.setClip(0,0,2100,3300); g2d.drawImage(this, 225, 0,null); g2d.drawImage(this,225, 1550,null); } catch(Exception exc) { } /* tell the caller that this page is part of the printed document */ //return NO_SUCH_PAGE; return PAGE_EXISTS; } public BufferedImage resizeOurImageFromImage(BufferedImage OurImage, int targetWidth, int targetHeight) throws Exception { double tempWidth, tempHeight; int w,h,type; Boolean OurImageHasAlpha; OurImageHasAlpha = OurImage.getColorModel().hasAlpha(); if(OurImageHasAlpha) { type = BufferedImage.TYPE_INT_ARGB; } else { type = BufferedImage.TYPE_INT_RGB; } w = OurImage.getWidth(); h = OurImage.getHeight(); if((targetWidth == 0) && (targetHeight != 0)) { targetWidth = (targetHeight * w) / h; } else { if((targetHeight == 0) && (targetWidth != 0)) { targetHeight = (targetWidth * h) / w; } } if((targetHeight == 0) || (targetWidth == 0)) { throw(new Exception("In the Resize Image module with one dimension still zero after trying proportion")); } do { if(w > targetWidth) { tempWidth = ((double) w)/1.2; if (tempWidth < (double) targetWidth) { w = targetWidth; } else { w = (int) java.lang.Math.round(tempWidth + 0.49); } } else { w = targetWidth; } if(h > targetHeight) { tempHeight = ((double) h)/1.2; if (tempHeight < (double) targetHeight) { h = targetHeight; } else { h = (int) java.lang.Math.round(tempHeight + 0.49); } } else { h = targetHeight; } BufferedImage tmp = new BufferedImage(w, h, type); Graphics2D g2 = tmp.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.drawImage(OurImage, 0, 0, w, h, null); g2.dispose(); OurImage = tmp; } while ((targetHeight != h) || (targetWidth != w)); return OurImage; } }