001/* ===========================================================
002 * JFreeChart : a free chart library for the Java(tm) platform
003 * ===========================================================
004 *
005 * (C) Copyright 2000-present, by David Gilbert 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 * [Oracle and Java are registered trademarks of Oracle and/or its affiliates. 
025 * Other names may be trademarks of their respective owners.]
026 *
027 * -------------------------
028 * SunPNGEncoderAdapter.java
029 * -------------------------
030 * (C) Copyright 2004-present, by Richard Atkinson and Contributors.
031 *
032 * Original Author:  Richard Atkinson;
033 * Contributor(s):   -;
034 *
035 */
036
037package org.jfree.chart.encoders;
038
039import java.awt.image.BufferedImage;
040import java.io.ByteArrayOutputStream;
041import java.io.IOException;
042import java.io.OutputStream;
043
044import javax.imageio.ImageIO;
045import org.jfree.chart.util.Args;
046
047/**
048 * Adapter class for the Sun PNG Encoder.  The ImageEncoderFactory will only
049 * return a reference to this class by default if the library has been compiled
050 * under a JDK 1.4+ and is being run using a JDK 1.4+.
051 */
052public class SunPNGEncoderAdapter implements ImageEncoder {
053
054    /**
055     * Get the quality of the image encoding (always 0.0).
056     *
057     * @return A float representing the quality.
058     */
059    @Override
060    public float getQuality() {
061        return 0.0f;
062    }
063
064    /**
065     * Set the quality of the image encoding (not supported in this
066     * ImageEncoder).
067     *
068     * @param quality  A float representing the quality.
069     */
070    @Override
071    public void setQuality(float quality) {
072        //  No op
073    }
074
075    /**
076     * Get whether the encoder should encode alpha transparency (always false).
077     *
078     * @return Whether the encoder is encoding alpha transparency.
079     */
080    @Override
081    public boolean isEncodingAlpha() {
082        return false;
083    }
084
085    /**
086     * Set whether the encoder should encode alpha transparency (not
087     * supported in this ImageEncoder).
088     *
089     * @param encodingAlpha  Whether the encoder should encode alpha
090     *                       transparency.
091     */
092    @Override
093    public void setEncodingAlpha(boolean encodingAlpha) {
094        //  No op
095    }
096
097    /**
098     * Encodes an image in PNG format.
099     *
100     * @param bufferedImage  The image to be encoded.
101     *
102     * @return The byte[] that is the encoded image.
103     *
104     * @throws IOException if there is an IO problem.
105     */
106    @Override
107    public byte[] encode(BufferedImage bufferedImage) throws IOException {
108        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
109        encode(bufferedImage, outputStream);
110        return outputStream.toByteArray();
111    }
112
113    /**
114     * Encodes an image in PNG format and writes it to an OutputStream.
115     *
116     * @param bufferedImage  The image to be encoded.
117     * @param outputStream  The OutputStream to write the encoded image to.
118     * @throws IOException if there is an IO problem.
119     */
120    @Override
121    public void encode(BufferedImage bufferedImage, OutputStream outputStream)
122            throws IOException {
123        Args.nullNotPermitted(bufferedImage, "bufferedImage");
124        Args.nullNotPermitted(outputStream, "outputStream");
125        ImageIO.write(bufferedImage, ImageFormat.PNG, outputStream);
126    }
127
128}