001 /* =========================================================== 002 * JFreeChart : a free chart library for the Java(tm) platform 003 * =========================================================== 004 * 005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. 006 * 007 * Project Info: http://www.jfree.org/jfreechart/index.html 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 025 * in the United States and other countries.] 026 * 027 * ------------------------------ 028 * KeypointPNGEncoderAdapter.java 029 * ------------------------------ 030 * (C) Copyright 2004, by Richard Atkinson and Contributors. 031 * 032 * Original Author: Richard Atkinson; 033 * Contributor(s): -; 034 * 035 * $Id: KeypointPNGEncoderAdapter.java,v 1.4.2.2 2005/11/24 11:50:48 mungady Exp $ 036 * 037 * Changes 038 * ------- 039 * 01-Aug-2004 : Initial version (RA); 040 * 041 */ 042 043 package org.jfree.chart.encoders; 044 045 import com.keypoint.PngEncoder; 046 047 import java.awt.image.BufferedImage; 048 import java.io.IOException; 049 import java.io.OutputStream; 050 051 /** 052 * Adapter class for the Keypoint PNG Encoder. The ImageEncoderFactory will 053 * only return a reference to this class by default if the library has been 054 * compiled under a JDK < 1.4 or is being run using a JDK < 1.4. 055 * 056 * @author Richard Atkinson 057 */ 058 public class KeypointPNGEncoderAdapter implements ImageEncoder { 059 private int quality = 9; 060 private boolean encodingAlpha = false; 061 062 /** 063 * Get the quality of the image encoding. The underlying encoder uses int 064 * values: 0 for no compression, and values 1 through 9 for various levels 065 * of compression (1 is best speed, 9 is best compression). 066 * 067 * @return A float representing the quality. 068 */ 069 public float getQuality() { 070 return this.quality; 071 } 072 073 /** 074 * Set the quality of the image encoding (supported). The underlying 075 * encoder uses int values: 0 for no compression, and values 1 through 9 076 * for various levels of compression (1 is best speed, 9 is best 077 * compression). 078 * 079 * @param quality A float representing the quality. 080 */ 081 public void setQuality(float quality) { 082 this.quality = (int) quality; 083 } 084 085 /** 086 * Get whether the encoder should encode alpha transparency. 087 * 088 * @return Whether the encoder is encoding alpha transparency. 089 */ 090 public boolean isEncodingAlpha() { 091 return this.encodingAlpha; 092 } 093 094 /** 095 * Set whether the encoder should encode alpha transparency (supported). 096 * 097 * @param encodingAlpha Whether the encoder should encode alpha 098 * transparency. 099 */ 100 public void setEncodingAlpha(boolean encodingAlpha) { 101 this.encodingAlpha = encodingAlpha; 102 } 103 104 /** 105 * Encodes an image in PNG format. 106 * 107 * @param bufferedImage The image to be encoded. 108 * @return The byte[] that is the encoded image. 109 * @throws IOException 110 */ 111 public byte[] encode(BufferedImage bufferedImage) throws IOException { 112 if (bufferedImage == null) { 113 throw new IllegalArgumentException("Null 'image' argument."); 114 } 115 PngEncoder encoder = new PngEncoder(bufferedImage, this.encodingAlpha, 116 0, this.quality); 117 return encoder.pngEncode(); 118 } 119 120 /** 121 * Encodes an image in PNG format and writes it to an 122 * <code>OutputStream</code>. 123 * 124 * @param bufferedImage The image to be encoded. 125 * @param outputStream The OutputStream to write the encoded image to. 126 * @throws IOException 127 */ 128 public void encode(BufferedImage bufferedImage, OutputStream outputStream) 129 throws IOException { 130 if (bufferedImage == null) { 131 throw new IllegalArgumentException("Null 'image' argument."); 132 } 133 if (outputStream == null) { 134 throw new IllegalArgumentException("Null 'outputStream' argument."); 135 } 136 PngEncoder encoder = new PngEncoder(bufferedImage, this.encodingAlpha, 137 0, this.quality); 138 outputStream.write(encoder.pngEncode()); 139 } 140 141 }