001: /* ===========================================================
002: * JFreeChart : a free chart library for the Java(tm) platform
003: * ===========================================================
004: *
005: * (C) Copyright 2000-2007, 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, 2007, by Richard Atkinson and Contributors.
031: *
032: * Original Author: Richard Atkinson;
033: * Contributor(s): -;
034: *
035: * $Id: KeypointPNGEncoderAdapter.java,v 1.4.2.4 2007/04/17 11:01:42 mungady Exp $
036: *
037: * Changes
038: * -------
039: * 01-Aug-2004 : Initial version (RA);
040: * 02-Feb-2007 : Removed author tags all over JFreeChart sources (DG);
041: *
042: */
043:
044: package org.jfree.chart.encoders;
045:
046: import java.awt.image.BufferedImage;
047: import java.io.IOException;
048: import java.io.OutputStream;
049:
050: import com.keypoint.PngEncoder;
051:
052: /**
053: * Adapter class for the Keypoint PNG Encoder. The ImageEncoderFactory will
054: * only return a reference to this class by default if the library has been
055: * compiled under a JDK < 1.4 or is being run using a JDK < 1.4.
056: */
057: public class KeypointPNGEncoderAdapter implements ImageEncoder {
058: private int quality = 9;
059: private boolean encodingAlpha = false;
060:
061: /**
062: * Get the quality of the image encoding. The underlying encoder uses int
063: * values: 0 for no compression, and values 1 through 9 for various levels
064: * of compression (1 is best speed, 9 is best compression).
065: *
066: * @return A float representing the quality.
067: */
068: public float getQuality() {
069: return this .quality;
070: }
071:
072: /**
073: * Set the quality of the image encoding (supported). The underlying
074: * encoder uses int values: 0 for no compression, and values 1 through 9
075: * for various levels of compression (1 is best speed, 9 is best
076: * compression).
077: *
078: * @param quality A float representing the quality.
079: */
080: public void setQuality(float quality) {
081: this .quality = (int) quality;
082: }
083:
084: /**
085: * Get whether the encoder should encode alpha transparency.
086: *
087: * @return Whether the encoder is encoding alpha transparency.
088: */
089: public boolean isEncodingAlpha() {
090: return this .encodingAlpha;
091: }
092:
093: /**
094: * Set whether the encoder should encode alpha transparency (supported).
095: *
096: * @param encodingAlpha Whether the encoder should encode alpha
097: * transparency.
098: */
099: public void setEncodingAlpha(boolean encodingAlpha) {
100: this .encodingAlpha = encodingAlpha;
101: }
102:
103: /**
104: * Encodes an image in PNG format.
105: *
106: * @param bufferedImage The image to be encoded.
107: * @return The byte[] that is the encoded image.
108: * @throws IOException
109: */
110: public byte[] encode(BufferedImage bufferedImage)
111: throws IOException {
112: if (bufferedImage == null) {
113: throw new IllegalArgumentException("Null 'image' argument.");
114: }
115: PngEncoder encoder = new PngEncoder(bufferedImage,
116: this .encodingAlpha, 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,
129: OutputStream outputStream) throws IOException {
130: if (bufferedImage == null) {
131: throw new IllegalArgumentException("Null 'image' argument.");
132: }
133: if (outputStream == null) {
134: throw new IllegalArgumentException(
135: "Null 'outputStream' argument.");
136: }
137: PngEncoder encoder = new PngEncoder(bufferedImage,
138: this .encodingAlpha, 0, this.quality);
139: outputStream.write(encoder.pngEncode());
140: }
141:
142: }
|