Printing a BufferedImage in Java

荒凉一梦 提交于 2019-12-02 06:22:06

Printing is just like drawing on the screen, so eventually you get a Graphics object, and you just drawImage into it.

nsfyn55

I'm not sure what you mean by print. Print on a printer? Print to standard out? Write to a file?

You can check out this tutorial from sun. If you're looking to write to a file. Open in your favorite image tool and print from there.

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

If you're building a graphical app and using something like AWT you can using the java printing API which would probably require some tap dancing.

I'm trying to do that by extending BufferedImage to implement the Printable interface like so (a collage of code I found from around the web):

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;
 }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!