Source for org.jfree.chart.ChartUtilities

   1: /* ===========================================================
   2:  * JFreeChart : a free chart library for the Java(tm) platform
   3:  * ===========================================================
   4:  *
   5:  * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors.
   6:  *
   7:  * Project Info:  http://www.jfree.org/jfreechart/index.html
   8:  *
   9:  * This library is free software; you can redistribute it and/or modify it 
  10:  * under the terms of the GNU Lesser General Public License as published by 
  11:  * the Free Software Foundation; either version 2.1 of the License, or 
  12:  * (at your option) any later version.
  13:  *
  14:  * This library is distributed in the hope that it will be useful, but 
  15:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  16:  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
  17:  * License for more details.
  18:  *
  19:  * You should have received a copy of the GNU Lesser General Public
  20:  * License along with this library; if not, write to the Free Software
  21:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
  22:  * USA.  
  23:  *
  24:  * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
  25:  * in the United States and other countries.]
  26:  *
  27:  * -------------------
  28:  * ChartUtilities.java
  29:  * -------------------
  30:  * (C) Copyright 2001-2007, by Object Refinery Limited and Contributors.
  31:  *
  32:  * Original Author:  David Gilbert (for Object Refinery Limited);
  33:  * Contributor(s):   Wolfgang Irler;
  34:  *                   Richard Atkinson;
  35:  *                   Xavier Poinsard;
  36:  *
  37:  * $Id: ChartUtilities.java,v 1.4.2.4 2007/03/19 14:07:53 mungady Exp $
  38:  *
  39:  * Changes
  40:  * -------
  41:  * 11-Dec-2001 : Version 1.  The JPEG method comes from Wolfgang Irler's 
  42:  *               JFreeChartServletDemo class (DG);
  43:  * 23-Jan-2002 : Changed saveChartAsXXX() methods to pass IOExceptions back to 
  44:  *               caller (DG);
  45:  * 26-Jun-2002 : Added image map methods (DG);
  46:  * 05-Aug-2002 : Added writeBufferedImage methods
  47:  *               Modified writeImageMap method to support flexible image 
  48:  *               maps (RA);
  49:  * 26-Aug-2002 : Added saveChartAsJPEG and writeChartAsJPEG methods with info 
  50:  *               objects (RA);
  51:  * 05-Sep-2002 : Added writeImageMap() method to support OverLIB
  52:  *               - http://www.bosrup.com/web/overlib (RA);
  53:  * 26-Sep-2002 : Fixed errors reported by Checkstyle (DG);
  54:  * 17-Oct-2002 : Exposed JPEG quality setting and PNG compression level as 
  55:  *               parameters (DG);
  56:  * 25-Oct-2002 : Fixed writeChartAsJPEG() empty method bug (DG);
  57:  * 13-Mar-2003 : Updated writeImageMap method as suggested by Xavier Poinsard 
  58:  *               (see Feature Request 688079) (DG);
  59:  * 12-Aug-2003 : Added support for custom image maps using 
  60:  *               ToolTipTagFragmentGenerator and URLTagFragmentGenerator (RA);
  61:  * 02-Sep-2003 : Separated PNG encoding from writing chart to an 
  62:  *               OutputStream (RA);
  63:  * 04-Dec-2003 : Chart draw() method modified to include anchor point (DG);
  64:  * 20-Feb-2004 : Edited Javadocs and added argument checking (DG);
  65:  * 05-Apr-2004 : Fixed problem with buffered image type (DG);
  66:  * 01-Aug-2004 : Modified to use EncoderUtil for all image encoding (RA);
  67:  * 02-Aug-2004 : Delegated image map related functionality to ImageMapUtil (RA);
  68:  * 13-Jan-2005 : Renamed ImageMapUtil --> ImageMapUtilities, removed method
  69:  *               writeImageMap(PrintWriter, String, ChartRenderingInfo) which 
  70:  *               exists in ImageMapUtilities (DG);
  71:  * ------------- JFREECHART 1.0.x ---------------------------------------------
  72:  * 06-Feb-2006 : API doc update (DG);
  73:  * 19-Mar-2007 : Use try-finally to close output stream in saveChartAsXXX() 
  74:  *               methods (DG);
  75:  *
  76:  */
  77: 
  78: package org.jfree.chart;
  79: 
  80: import java.awt.Graphics2D;
  81: import java.awt.geom.AffineTransform;
  82: import java.awt.geom.Rectangle2D;
  83: import java.awt.image.BufferedImage;
  84: import java.io.BufferedOutputStream;
  85: import java.io.File;
  86: import java.io.FileOutputStream;
  87: import java.io.IOException;
  88: import java.io.OutputStream;
  89: import java.io.PrintWriter;
  90: 
  91: import org.jfree.chart.imagemap.ImageMapUtilities;
  92: import org.jfree.chart.imagemap.OverLIBToolTipTagFragmentGenerator;
  93: import org.jfree.chart.imagemap.StandardToolTipTagFragmentGenerator;
  94: import org.jfree.chart.imagemap.StandardURLTagFragmentGenerator;
  95: import org.jfree.chart.imagemap.ToolTipTagFragmentGenerator;
  96: import org.jfree.chart.imagemap.URLTagFragmentGenerator;
  97: 
  98: import org.jfree.chart.encoders.EncoderUtil;
  99: import org.jfree.chart.encoders.ImageFormat;
 100: 
 101: /**
 102:  * A collection of utility methods for JFreeChart.  Includes methods for 
 103:  * converting charts to image formats (PNG and JPEG) plus creating simple HTML 
 104:  * image maps.
 105:  * 
 106:  * @see ImageMapUtilities
 107:  */
 108: public abstract class ChartUtilities {
 109: 
 110:     /**
 111:      * Writes a chart to an output stream in PNG format.
 112:      *
 113:      * @param out  the output stream (<code>null</code> not permitted).
 114:      * @param chart  the chart (<code>null</code> not permitted).
 115:      * @param width  the image width.
 116:      * @param height  the image height.
 117:      *
 118:      * @throws IOException if there are any I/O errors.
 119:      */
 120:     public static void writeChartAsPNG(OutputStream out, JFreeChart chart,
 121:             int width, int height) throws IOException {
 122: 
 123:         // defer argument checking...
 124:         writeChartAsPNG(out, chart, width, height, null);
 125: 
 126:     }
 127: 
 128:     /**
 129:      * Writes a chart to an output stream in PNG format.
 130:      *
 131:      * @param out  the output stream (<code>null</code> not permitted).
 132:      * @param chart  the chart (<code>null</code> not permitted).
 133:      * @param width  the image width.
 134:      * @param height  the image height.
 135:      * @param encodeAlpha  encode alpha?
 136:      * @param compression  the compression level (0-9).
 137:      *
 138:      * @throws IOException if there are any I/O errors.
 139:      */
 140:     public static void writeChartAsPNG(OutputStream out, JFreeChart chart,
 141:             int width, int height, boolean encodeAlpha, int compression) 
 142:             throws IOException {
 143: 
 144:         // defer argument checking...
 145:         ChartUtilities.writeChartAsPNG(out, chart, width, height, null, 
 146:                 encodeAlpha, compression);
 147: 
 148:     }
 149: 
 150:     /**
 151:      * Writes a chart to an output stream in PNG format.  This method allows 
 152:      * you to pass in a {@link ChartRenderingInfo} object, to collect 
 153:      * information about the chart dimensions/entities.  You will need this 
 154:      * info if you want to create an HTML image map.
 155:      *
 156:      * @param out  the output stream (<code>null</code> not permitted).
 157:      * @param chart  the chart (<code>null</code> not permitted).
 158:      * @param width  the image width.
 159:      * @param height  the image height.
 160:      * @param info  the chart rendering info (<code>null</code> permitted).
 161:      *
 162:      * @throws IOException if there are any I/O errors.
 163:      */
 164:     public static void writeChartAsPNG(OutputStream out, JFreeChart chart,
 165:             int width, int height,  ChartRenderingInfo info) 
 166:             throws IOException {
 167: 
 168:         if (chart == null) {
 169:             throw new IllegalArgumentException("Null 'chart' argument.");
 170:         }
 171:         BufferedImage bufferedImage 
 172:                 = chart.createBufferedImage(width, height, info);
 173:         EncoderUtil.writeBufferedImage(bufferedImage, ImageFormat.PNG, out);
 174:     }
 175: 
 176:     /**
 177:      * Writes a chart to an output stream in PNG format.  This method allows 
 178:      * you to pass in a {@link ChartRenderingInfo} object, to collect 
 179:      * information about the chart dimensions/entities.  You will need this 
 180:      * info if you want to create an HTML image map.
 181:      *
 182:      * @param out  the output stream (<code>null</code> not permitted).
 183:      * @param chart  the chart (<code>null</code> not permitted).
 184:      * @param width  the image width.
 185:      * @param height  the image height.
 186:      * @param info  carries back chart rendering info (<code>null</code> 
 187:      *              permitted).
 188:      * @param encodeAlpha  encode alpha?
 189:      * @param compression  the PNG compression level (0-9).
 190:      *
 191:      * @throws IOException if there are any I/O errors.
 192:      */
 193:     public static void writeChartAsPNG(OutputStream out, JFreeChart chart,
 194:             int width, int height, ChartRenderingInfo info,
 195:             boolean encodeAlpha, int compression) throws IOException {
 196: 
 197:         if (out == null) {
 198:             throw new IllegalArgumentException("Null 'out' argument.");
 199:         }
 200:         if (chart == null) {
 201:             throw new IllegalArgumentException("Null 'chart' argument.");
 202:         }
 203:         BufferedImage chartImage = chart.createBufferedImage(width, height, 
 204:                 BufferedImage.TYPE_INT_ARGB, info);
 205:         ChartUtilities.writeBufferedImageAsPNG(out, chartImage, encodeAlpha, 
 206:                 compression);
 207: 
 208:     }
 209: 
 210:     /**
 211:      * Writes a scaled version of a chart to an output stream in PNG format.
 212:      *
 213:      * @param out  the output stream (<code>null</code> not permitted).
 214:      * @param chart  the chart (<code>null</code> not permitted).
 215:      * @param width  the unscaled chart width.
 216:      * @param height  the unscaled chart height.
 217:      * @param widthScaleFactor  the horizontal scale factor.
 218:      * @param heightScaleFactor  the vertical scale factor.
 219:      *
 220:      * @throws IOException if there are any I/O problems.
 221:      */
 222:     public static void writeScaledChartAsPNG(OutputStream out,
 223:             JFreeChart chart, int width, int height, int widthScaleFactor,
 224:             int heightScaleFactor) throws IOException {
 225: 
 226:         if (out == null) {
 227:             throw new IllegalArgumentException("Null 'out' argument.");
 228:         }
 229:         if (chart == null) {
 230:             throw new IllegalArgumentException("Null 'chart' argument.");
 231:         }
 232: 
 233:         double desiredWidth = width * widthScaleFactor;
 234:         double desiredHeight = height * heightScaleFactor;
 235:         double defaultWidth = width;
 236:         double defaultHeight = height;
 237:         boolean scale = false;
 238: 
 239:         // get desired width and height from somewhere then...
 240:         if ((widthScaleFactor != 1) || (heightScaleFactor != 1)) {
 241:             scale = true;
 242:         }
 243: 
 244:         double scaleX = desiredWidth / defaultWidth;
 245:         double scaleY = desiredHeight / defaultHeight;
 246: 
 247:         BufferedImage image = new BufferedImage((int) desiredWidth, 
 248:                 (int) desiredHeight, BufferedImage.TYPE_INT_ARGB);
 249:         Graphics2D g2 = image.createGraphics();
 250: 
 251:         if (scale) {
 252:             AffineTransform saved = g2.getTransform();
 253:             g2.transform(AffineTransform.getScaleInstance(scaleX, scaleY));
 254:             chart.draw(g2, new Rectangle2D.Double(0, 0, defaultWidth, 
 255:                     defaultHeight), null, null);
 256:             g2.setTransform(saved);
 257:             g2.dispose();
 258:         }
 259:         else {
 260:             chart.draw(g2, new Rectangle2D.Double(0, 0, defaultWidth, 
 261:                     defaultHeight), null, null);
 262:         }
 263:         out.write(encodeAsPNG(image));
 264: 
 265:     }
 266: 
 267:     /**
 268:      * Saves a chart to the specified file in PNG format.
 269:      *
 270:      * @param file  the file name (<code>null</code> not permitted).
 271:      * @param chart  the chart (<code>null</code> not permitted).
 272:      * @param width  the image width.
 273:      * @param height  the image height.
 274:      *
 275:      * @throws IOException if there are any I/O errors.
 276:      */
 277:     public static void saveChartAsPNG(File file, JFreeChart chart,
 278:             int width, int height) throws IOException {
 279: 
 280:         // defer argument checking...
 281:         saveChartAsPNG(file, chart, width, height, null);
 282: 
 283:     }
 284: 
 285:     /**
 286:      * Saves a chart to a file in PNG format.  This method allows you to pass 
 287:      * in a {@link ChartRenderingInfo} object, to collect information about the 
 288:      * chart dimensions/entities.  You will need this info if you want to 
 289:      * create an HTML image map.
 290:      *
 291:      * @param file  the file (<code>null</code> not permitted).
 292:      * @param chart  the chart (<code>null</code> not permitted).
 293:      * @param width  the image width.
 294:      * @param height  the image height.
 295:      * @param info  the chart rendering info (<code>null</code> permitted).
 296:      *
 297:      * @throws IOException if there are any I/O errors.
 298:      */
 299:     public static void saveChartAsPNG(File file, JFreeChart chart,
 300:             int width, int height, ChartRenderingInfo info) 
 301:         throws IOException {
 302: 
 303:         if (file == null) {
 304:             throw new IllegalArgumentException("Null 'file' argument.");
 305:         }
 306:         OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
 307:         try {
 308:             ChartUtilities.writeChartAsPNG(out, chart, width, height, info);
 309:         }
 310:         finally {
 311:             out.close();
 312:         }
 313:     }
 314: 
 315:     /**
 316:      * Saves a chart to a file in PNG format.  This method allows you to pass 
 317:      * in a {@link ChartRenderingInfo} object, to collect information about the 
 318:      * chart dimensions/entities.  You will need this info if you want to 
 319:      * create an HTML image map.
 320:      *
 321:      * @param file  the file (<code>null</code> not permitted).
 322:      * @param chart  the chart (<code>null</code> not permitted).
 323:      * @param width  the image width.
 324:      * @param height  the image height.
 325:      * @param info  the chart rendering info (<code>null</code> permitted).
 326:      * @param encodeAlpha  encode alpha?
 327:      * @param compression  the PNG compression level (0-9).
 328:      *
 329:      * @throws IOException if there are any I/O errors.
 330:      */
 331:     public static void saveChartAsPNG(File file, JFreeChart chart,
 332:            int width, int height, ChartRenderingInfo info, boolean encodeAlpha,
 333:            int compression) throws IOException {
 334: 
 335:         if (file == null) {
 336:             throw new IllegalArgumentException("Null 'file' argument.");
 337:         }
 338:         if (chart == null) {
 339:             throw new IllegalArgumentException("Null 'chart' argument.");
 340:         }
 341: 
 342:         OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
 343:         try {
 344:             writeChartAsPNG(out, chart, width, height, info, encodeAlpha, 
 345:                     compression);
 346:         }
 347:         finally {
 348:             out.close();
 349:         }
 350: 
 351:     }
 352: 
 353:     /**
 354:      * Writes a chart to an output stream in JPEG format.  Please note that
 355:      * JPEG is a poor format for chart images, use PNG if possible.
 356:      * 
 357:      * @param out  the output stream (<code>null</code> not permitted).
 358:      * @param chart  the chart (<code>null</code> not permitted).
 359:      * @param width  the image width.
 360:      * @param height  the image height.
 361:      *
 362:      * @throws IOException if there are any I/O errors.
 363:      */
 364:     public static void writeChartAsJPEG(OutputStream out,
 365:             JFreeChart chart, int width, int height) throws IOException {
 366: 
 367:         // defer argument checking...
 368:         writeChartAsJPEG(out, chart, width, height, null);
 369: 
 370:     }
 371: 
 372:     /**
 373:      * Writes a chart to an output stream in JPEG format.  Please note that
 374:      * JPEG is a poor format for chart images, use PNG if possible.
 375:      *
 376:      * @param out  the output stream (<code>null</code> not permitted).
 377:      * @param quality  the quality setting.
 378:      * @param chart  the chart (<code>null</code> not permitted).
 379:      * @param width  the image width.
 380:      * @param height  the image height.
 381:      *
 382:      * @throws IOException if there are any I/O errors.
 383:      */
 384:     public static void writeChartAsJPEG(OutputStream out, float quality,
 385:             JFreeChart chart, int width, int height) throws IOException {
 386: 
 387:         // defer argument checking...
 388:         ChartUtilities.writeChartAsJPEG(out, quality, chart, width, height, 
 389:                 null);
 390: 
 391:     }
 392: 
 393:     /**
 394:      * Writes a chart to an output stream in JPEG format. This method allows 
 395:      * you to pass in a {@link ChartRenderingInfo} object, to collect 
 396:      * information about the chart dimensions/entities.  You will need this 
 397:      * info if you want to create an HTML image map.
 398:      *
 399:      * @param out  the output stream (<code>null</code> not permitted).
 400:      * @param chart  the chart (<code>null</code> not permitted).
 401:      * @param width  the image width.
 402:      * @param height  the image height.
 403:      * @param info  the chart rendering info (<code>null</code> permitted).
 404:      *
 405:      * @throws IOException if there are any I/O errors.
 406:      */
 407:     public static void writeChartAsJPEG(OutputStream out, JFreeChart chart,
 408:             int width, int height, ChartRenderingInfo info) 
 409:             throws IOException {
 410: 
 411:         if (chart == null) {
 412:             throw new IllegalArgumentException("Null 'chart' argument.");
 413:         }
 414:         BufferedImage image = chart.createBufferedImage(width, height, info);
 415:         EncoderUtil.writeBufferedImage(image, ImageFormat.JPEG, out);
 416: 
 417:     }
 418: 
 419:     /**
 420:      * Writes a chart to an output stream in JPEG format.  This method allows 
 421:      * you to pass in a {@link ChartRenderingInfo} object, to collect 
 422:      * information about the chart dimensions/entities.  You will need this 
 423:      * info if you want to create an HTML image map.
 424:      *
 425:      * @param out  the output stream (<code>null</code> not permitted).
 426:      * @param quality  the output quality (0.0f to 1.0f).
 427:      * @param chart  the chart (<code>null</code> not permitted).
 428:      * @param width  the image width.
 429:      * @param height  the image height.
 430:      * @param info  the chart rendering info (<code>null</code> permitted).
 431:      *
 432:      * @throws IOException if there are any I/O errors.
 433:      */
 434:     public static void writeChartAsJPEG(OutputStream out, float quality,
 435:             JFreeChart chart, int width, int height, ChartRenderingInfo info) 
 436:             throws IOException {
 437: 
 438:         if (chart == null) {
 439:             throw new IllegalArgumentException("Null 'chart' argument.");
 440:         }
 441:         BufferedImage image = chart.createBufferedImage(width, height, info);
 442:         EncoderUtil.writeBufferedImage(image, ImageFormat.JPEG, out, quality);
 443: 
 444:     }
 445: 
 446:     /**
 447:      * Saves a chart to a file in JPEG format.
 448:      *
 449:      * @param file  the file (<code>null</code> not permitted).
 450:      * @param chart  the chart (<code>null</code> not permitted).
 451:      * @param width  the image width.
 452:      * @param height  the image height.
 453:      *
 454:      * @throws IOException if there are any I/O errors.
 455:      */
 456:     public static void saveChartAsJPEG(File file, JFreeChart chart,
 457:             int width, int height) throws IOException {
 458: 
 459:         // defer argument checking...
 460:         saveChartAsJPEG(file, chart, width, height, null);
 461: 
 462:     }
 463: 
 464:     /**
 465:      * Saves a chart to a file in JPEG format.
 466:      *
 467:      * @param file  the file (<code>null</code> not permitted).
 468:      * @param quality  the JPEG quality setting.
 469:      * @param chart  the chart (<code>null</code> not permitted).
 470:      * @param width  the image width.
 471:      * @param height  the image height.
 472:      *
 473:      * @throws IOException if there are any I/O errors.
 474:      */
 475:     public static void saveChartAsJPEG(File file, float quality,
 476:             JFreeChart chart, int width, int height) throws IOException {
 477: 
 478:         // defer argument checking...
 479:         saveChartAsJPEG(file, quality, chart, width, height, null);
 480: 
 481:     }
 482: 
 483:     /**
 484:      * Saves a chart to a file in JPEG format.  This method allows you to pass 
 485:      * in a {@link ChartRenderingInfo} object, to collect information about the 
 486:      * chart dimensions/entities.  You will need this info if you want to 
 487:      * create an HTML image map.
 488:      *
 489:      * @param file  the file name (<code>null</code> not permitted).
 490:      * @param chart  the chart (<code>null</code> not permitted).
 491:      * @param width  the image width.
 492:      * @param height  the image height.
 493:      * @param info  the chart rendering info (<code>null</code> permitted).
 494:      *
 495:      * @throws IOException if there are any I/O errors.
 496:      */
 497:     public static void saveChartAsJPEG(File file, JFreeChart chart,
 498:             int width, int height, ChartRenderingInfo info) throws IOException {
 499: 
 500:         if (file == null) {
 501:             throw new IllegalArgumentException("Null 'file' argument.");
 502:         }
 503:         if (chart == null) {
 504:             throw new IllegalArgumentException("Null 'chart' argument.");
 505:         }
 506:         OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
 507:         try {
 508:             writeChartAsJPEG(out, chart, width, height, info);
 509:         }
 510:         finally {
 511:             out.close();
 512:         }
 513: 
 514:     }
 515: 
 516:     /**
 517:      * Saves a chart to a file in JPEG format.  This method allows you to pass 
 518:      * in a {@link ChartRenderingInfo} object, to collect information about the 
 519:      * chart dimensions/entities.  You will need this info if you want to 
 520:      * create an HTML image map.
 521:      *
 522:      * @param file  the file name (<code>null</code> not permitted).
 523:      * @param quality  the quality setting.
 524:      * @param chart  the chart (<code>null</code> not permitted).
 525:      * @param width  the image width.
 526:      * @param height  the image height.
 527:      * @param info  the chart rendering info (<code>null</code> permitted).
 528:      *
 529:      * @throws IOException if there are any I/O errors.
 530:      */
 531:     public static void saveChartAsJPEG(File file, float quality,
 532:             JFreeChart chart, int width, int height,
 533:             ChartRenderingInfo info) throws IOException {
 534: 
 535:         if (file == null) {
 536:             throw new IllegalArgumentException("Null 'file' argument.");
 537:         }
 538:         if (chart == null) {
 539:             throw new IllegalArgumentException("Null 'chart' argument.");
 540:         }
 541:         
 542:         OutputStream out = new BufferedOutputStream(new FileOutputStream(
 543:                 file));
 544:         try {
 545:             writeChartAsJPEG(out, quality, chart, width, height, info);
 546:         }
 547:         finally {
 548:             out.close();
 549:         }
 550: 
 551:     }
 552: 
 553:     /**
 554:      * Writes a {@link BufferedImage} to an output stream in JPEG format.
 555:      *
 556:      * @param out  the output stream (<code>null</code> not permitted).
 557:      * @param image  the image (<code>null</code> not permitted).
 558:      *
 559:      * @throws IOException if there are any I/O errors.
 560:      */
 561:     public static void writeBufferedImageAsJPEG(OutputStream out, 
 562:             BufferedImage image) throws IOException {
 563: 
 564:         // defer argument checking...
 565:         writeBufferedImageAsJPEG(out, 0.75f, image);
 566: 
 567:     }
 568: 
 569:     /**
 570:      * Writes a {@link BufferedImage} to an output stream in JPEG format.
 571:      *
 572:      * @param out  the output stream (<code>null</code> not permitted).
 573:      * @param quality  the image quality (0.0f to 1.0f).
 574:      * @param image  the image (<code>null</code> not permitted).
 575:      *
 576:      * @throws IOException if there are any I/O errors.
 577:      */
 578:     public static void writeBufferedImageAsJPEG(OutputStream out, float quality,
 579:             BufferedImage image) throws IOException {
 580: 
 581:         EncoderUtil.writeBufferedImage(image, ImageFormat.JPEG, out, quality);
 582: 
 583:     }
 584: 
 585:     /**
 586:      * Writes a {@link BufferedImage} to an output stream in PNG format.
 587:      *
 588:      * @param out  the output stream (<code>null</code> not permitted).
 589:      * @param image  the image (<code>null</code> not permitted).
 590:      *
 591:      * @throws IOException if there are any I/O errors.
 592:      */
 593:     public static void writeBufferedImageAsPNG(OutputStream out, 
 594:             BufferedImage image) throws IOException {
 595: 
 596:         EncoderUtil.writeBufferedImage(image, ImageFormat.PNG, out);
 597: 
 598:     }
 599: 
 600:     /**
 601:      * Writes a {@link BufferedImage} to an output stream in PNG format.
 602:      *
 603:      * @param out  the output stream (<code>null</code> not permitted).
 604:      * @param image  the image (<code>null</code> not permitted).
 605:      * @param encodeAlpha  encode alpha?
 606:      * @param compression  the compression level (0-9).
 607:      *
 608:      * @throws IOException if there are any I/O errors.
 609:      */
 610:     public static void writeBufferedImageAsPNG(OutputStream out,
 611:             BufferedImage image, boolean encodeAlpha, int compression) 
 612:             throws IOException {
 613: 
 614:         EncoderUtil.writeBufferedImage(image, ImageFormat.PNG, out, 
 615:                 compression, encodeAlpha);
 616:     }
 617: 
 618:     /**
 619:      * Encodes a {@link BufferedImage} to PNG format.
 620:      *
 621:      * @param image  the image (<code>null</code> not permitted).
 622:      *
 623:      * @return A byte array in PNG format.
 624:      * 
 625:      * @throws IOException if there is an I/O problem.
 626:      */
 627:     public static byte[] encodeAsPNG(BufferedImage image) throws IOException {
 628:         return EncoderUtil.encode(image, ImageFormat.PNG);
 629:     }
 630: 
 631:     /**
 632:      * Encodes a {@link BufferedImage} to PNG format.
 633:      *
 634:      * @param image  the image (<code>null</code> not permitted).
 635:      * @param encodeAlpha  encode alpha?
 636:      * @param compression  the PNG compression level (0-9).
 637:      *
 638:      * @return The byte array in PNG format.
 639:      * 
 640:      * @throws IOException if there is an I/O problem.
 641:      */
 642:     public static byte[] encodeAsPNG(BufferedImage image, boolean encodeAlpha, 
 643:                                      int compression) 
 644:             throws IOException {
 645:         return EncoderUtil.encode(image, ImageFormat.PNG, compression, 
 646:                 encodeAlpha);
 647:     }
 648: 
 649:     /**
 650:      * Writes an image map to an output stream.
 651:      *
 652:      * @param writer  the writer (<code>null</code> not permitted).
 653:      * @param name  the map name (<code>null</code> not permitted).
 654:      * @param info  the chart rendering info (<code>null</code> not permitted).
 655:      * @param useOverLibForToolTips  whether to use OverLIB for tooltips
 656:      *                               (http://www.bosrup.com/web/overlib/).
 657:      *
 658:      * @throws IOException if there are any I/O errors.
 659:      */
 660:     public static void writeImageMap(PrintWriter writer,
 661:                                      String name,
 662:                                      ChartRenderingInfo info,
 663:                                      boolean useOverLibForToolTips) 
 664:         throws IOException {
 665: 
 666:         ToolTipTagFragmentGenerator toolTipTagFragmentGenerator = null;
 667:         if (useOverLibForToolTips) {
 668:             toolTipTagFragmentGenerator 
 669:                     = new OverLIBToolTipTagFragmentGenerator();
 670:         }
 671:         else {
 672:             toolTipTagFragmentGenerator 
 673:                     = new StandardToolTipTagFragmentGenerator();
 674:         }
 675:         ImageMapUtilities.writeImageMap(writer, name, info, 
 676:                 toolTipTagFragmentGenerator, 
 677:                 new StandardURLTagFragmentGenerator());
 678: 
 679:     }
 680: 
 681:     /**
 682:      * Writes an image map to the specified writer.
 683:      *
 684:      * @param writer  the writer (<code>null</code> not permitted).
 685:      * @param name  the map name (<code>null</code> not permitted).
 686:      * @param info  the chart rendering info (<code>null</code> not permitted).
 687:      * @param toolTipTagFragmentGenerator  a generator for the HTML fragment
 688:      *     that will contain the tooltip text (<code>null</code> not permitted 
 689:      *     if <code>info</code> contains tooltip information).
 690:      * @param urlTagFragmentGenerator  a generator for the HTML fragment that
 691:      *     will contain the URL reference (<code>null</code> not permitted if 
 692:      *     <code>info</code> contains URLs).
 693:      *
 694:      * @throws IOException if there are any I/O errors.
 695:      */
 696:     public static void writeImageMap(PrintWriter writer, String name, 
 697:             ChartRenderingInfo info, 
 698:             ToolTipTagFragmentGenerator toolTipTagFragmentGenerator,
 699:             URLTagFragmentGenerator urlTagFragmentGenerator) 
 700:             throws IOException {
 701: 
 702:         writer.println(ImageMapUtilities.getImageMap(name, info, 
 703:                 toolTipTagFragmentGenerator, urlTagFragmentGenerator));
 704:     }
 705: 
 706:     /**
 707:      * Creates an HTML image map.  This method maps to 
 708:      * {@link ImageMapUtilities#getImageMap(String, ChartRenderingInfo, 
 709:      * ToolTipTagFragmentGenerator, URLTagFragmentGenerator)}, using default 
 710:      * generators.
 711:      *
 712:      * @param name  the map name (<code>null</code> not permitted).
 713:      * @param info  the chart rendering info (<code>null</code> not permitted).
 714:      *
 715:      * @return The map tag.
 716:      */
 717:     public static String getImageMap(String name, ChartRenderingInfo info) {
 718:         return ImageMapUtilities.getImageMap(name, info,
 719:                 new StandardToolTipTagFragmentGenerator(),
 720:                 new StandardURLTagFragmentGenerator());
 721:     }
 722: 
 723:     /**
 724:      * Creates an HTML image map.  This method maps directly to
 725:      * {@link ImageMapUtilities#getImageMap(String, ChartRenderingInfo, 
 726:      * ToolTipTagFragmentGenerator, URLTagFragmentGenerator)}.
 727:      *
 728:      * @param name  the map name (<code>null</code> not permitted).
 729:      * @param info  the chart rendering info (<code>null</code> not permitted).
 730:      * @param toolTipTagFragmentGenerator  a generator for the HTML fragment
 731:      *     that will contain the tooltip text (<code>null</code> not permitted 
 732:      *     if <code>info</code> contains tooltip information).
 733:      * @param urlTagFragmentGenerator  a generator for the HTML fragment that
 734:      *     will contain the URL reference (<code>null</code> not permitted if 
 735:      *     <code>info</code> contains URLs).
 736:      *
 737:      * @return The map tag.
 738:      */
 739:     public static String getImageMap(String name, ChartRenderingInfo info,
 740:             ToolTipTagFragmentGenerator toolTipTagFragmentGenerator,
 741:             URLTagFragmentGenerator urlTagFragmentGenerator) {
 742: 
 743:         return ImageMapUtilities.getImageMap(name, info, 
 744:                 toolTipTagFragmentGenerator, urlTagFragmentGenerator);
 745:         
 746:     }
 747: 
 748: }