Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / December 2007

Tip: Looking for answers? Try searching our database.

Scaling an Image to Print on 1 page

Thread view: 
ErcFrtz@gmail.com - 03 Dec 2007 16:50 GMT
Hello. I have an application that creates a bufferedimage, but most of
the times it's to big to print all on one page. What I want to do is
scale it to fit on one page. If anyone could show me some example code
on how to do this it would be appreciated. (I have the basic
understanding that I need to get the printable area of the printer and
then scale the image to fit in that but I'm not sure how to implement
this.) Thanks.
Knute Johnson - 03 Dec 2007 20:36 GMT
> Hello. I have an application that creates a bufferedimage, but most of
> the times it's to big to print all on one page. What I want to do is
[quoted text clipped - 3 lines]
> then scale the image to fit in that but I'm not sure how to implement
> this.) Thanks.

From the docs:

drawImage(Image img, int x, int y, int width, int height, ImageObserver
observer)

Draws as much of the specified image as has already been scaled to fit
inside the specified rectangle.

Signature

Knute Johnson
email s/nospam/knute/

ErcFrtz@gmail.com - 04 Dec 2007 21:29 GMT
On Dec 3, 2:36 pm, Knute Johnson <nos...@rabbitbrush.frazmtn.com>
wrote:
> ErcF...@gmail.com wrote:
> > Hello. I have an application that creates a bufferedimage, but most of
[quoted text clipped - 17 lines]
> Knute Johnson
> email s/nospam/knute/

I guess I'm not quite sure what you're saying I should do. Here is the
code for what I was trying to do:

<code>    public BufferedImage resizeImage(BufferedImage bimg)
    {
        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        aset.add(OrientationRequested.LANDSCAPE);
        MediaPrintableArea printableArea =
   
(MediaPrintableArea)Service.getSupportedAttributeValues(MediaPrintableArea.class,
null, aset);

        double printWidth = printableArea.getWidth(MediaPrintableArea.INCH);
        double printHeight =
printableArea.getHeight(MediaPrintableArea.INCH);

        int tempW = bimg.getWidth();
        int tempH = bimg.getHeight();
        double bimgWidth = tempW/72;
        double bimgHeight = tempH/72;

        double conversion;
        double Xconv = printWidth/bimgWidth;
        double Hconv = printHeight/bimgHeight;
        if(Xconv > Hconv)
            conversion = Xconv;
        else
            conversion = Hconv;

        int bimgNewW = conversion*tempW;
        int bimgNewH = conversion*tempH;
        BufferedImage newbimg = bimg.getScaledInstance(bimgNewW, bimgNewH,
BufferedImage.SCALE_DEFAULT);

        return newbimg;
    }</code>
Knute Johnson - 05 Dec 2007 02:39 GMT
> On Dec 3, 2:36 pm, Knute Johnson <nos...@rabbitbrush.frazmtn.com>
> wrote:
[quoted text clipped - 52 lines]
>         BufferedImage newbimg = bimg.getScaledInstance(bimgNewW, bimgNewH,
> BufferedImage.SCALE_DEFAULT);

This won't compile.  BufferedImage.getScaledInstance() returns an Image.

>         return newbimg;
>     }</code>

I was expecting you to draw you image in Printable.print().  I haven't
played with document printing in this style before.  Try the little
program below.  Change the kittens.jpg to your own image and adjust the
PageFormat with the dialog.  This will print the image scaled to fit in
the imageable width.

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.print.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class test extends JPanel implements Printable {
    BufferedImage bi;
    int w,h;
    volatile static PageFormat pf;

    public test() {
        try {
            bi = ImageIO.read(new File("kittens.jpg"));
            w = bi.getWidth();
            h = bi.getHeight();
            setPreferredSize(new Dimension(w,h));
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

    void render(Graphics g, boolean printerFlag) {
        if (printerFlag)
            g.drawImage(bi,
             (int)pf.getImageableX(),
             (int)pf.getImageableY(),
             (int)pf.getImageableWidth(),
             (int)(pf.getImageableWidth()/1.333),null);
        else
            g.drawImage(bi,0,0,w,h,null);
    }

    public void paintComponent(Graphics g) {
        render(g, false);
    }

    public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
        int retcod = Printable.PAGE_EXISTS;
        if (pageIndex == 0) {
            render(g, true);
        } else
            retcod = Printable.NO_SUCH_PAGE;

        return retcod;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new JFrame("test");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                final test t = new test();
                f.add(t,BorderLayout.CENTER);
                JButton b = new JButton("Print");
                b.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        PrinterJob pj = PrinterJob.getPrinterJob();
                        pf = pj.defaultPage();
                        pj.setPrintable(t);
                        PageFormat pf = pj.pageDialog(pj.defaultPage());
                        try {
                            pj.print();
                        } catch (PrinterException pe) {
                            pe.printStackTrace();
                        }
                    }
                });
                f.add(b,BorderLayout.SOUTH);
                f.pack();
                f.setVisible(true);
            }
        });
    }
}

Signature

Knute Johnson
email s/nospam/knute/

Knute Johnson - 05 Dec 2007 02:42 GMT
> On Dec 3, 2:36 pm, Knute Johnson <nos...@rabbitbrush.frazmtn.com>
> wrote:
[quoted text clipped - 55 lines]
>         return newbimg;
>     }</code>

Oh and for a really good description of all the methods;

http://java.sun.com/j2se/1.4.2/docs/guide/jps/index.html

Signature

Knute Johnson
email s/nospam/knute/



Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.