diff options
Diffstat (limited to 'awt/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java')
-rw-r--r-- | awt/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/awt/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java b/awt/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java new file mode 100644 index 0000000..34a3cd9 --- /dev/null +++ b/awt/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java @@ -0,0 +1,193 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package javax.imageio.plugins.jpeg; + +import org.apache.harmony.x.imageio.plugins.jpeg.JPEGConsts; + +import javax.imageio.ImageWriteParam; +import java.util.Locale; + +/** + * The JPEGImageWriteParam class allows to set JPEG Huffman tables + * and quantization when using the JPEG writer plug-in. + */ +public class JPEGImageWriteParam extends ImageWriteParam { + + /** The Constant COMP_QUALITY_VALUES. */ + private static final float[] COMP_QUALITY_VALUES = {0.05f, 0.75f, 0.95f}; + + /** The Constant COMP_QUALITY_DESCRIPTIONS. */ + private static final String[] COMP_QUALITY_DESCRIPTIONS = { + "Minimum useful", + "Visually lossless", + "Maximum useful" + }; + + /** The q tables. */ + private JPEGQTable[] qTables; + + /** The dc huffman tables. */ + private JPEGHuffmanTable[] dcHuffmanTables; + + /** The ac huffman tables. */ + private JPEGHuffmanTable[] acHuffmanTables; + + /** The optimize huffman tables. */ + private boolean optimizeHuffmanTables; + + /** + * Instantiates a new JPEGImageWriteParam object with + * the specified Locale. + * + * @param locale the Locale. + */ + public JPEGImageWriteParam(Locale locale) { + super(locale); + + canWriteProgressive = true; + progressiveMode = ImageWriteParam.MODE_DISABLED; + + canWriteCompressed = true; + compressionTypes = new String[]{"JPEG"}; + compressionType = compressionTypes[0]; + compressionQuality = JPEGConsts.DEFAULT_JPEG_COMPRESSION_QUALITY; + } + + /** + * Returns true if tables are set, false otherwise. + * + * @return true if tables are set, false otherwise. + */ + public boolean areTablesSet() { + return qTables != null; + } + + /** + * Sets the quantization and Huffman tables for using in + * encoding streams. + * + * @param qTables the quantization tables. + * @param DCHuffmanTables the standart DC Huffman tables. + * @param ACHuffmanTables the standart AC huffman tables. + */ + public void setEncodeTables( + JPEGQTable[] qTables, + JPEGHuffmanTable[] DCHuffmanTables, + JPEGHuffmanTable[] ACHuffmanTables + ) { + if (qTables == null || DCHuffmanTables == null || ACHuffmanTables == null) { + throw new IllegalArgumentException("Invalid JPEG table arrays"); + } + if(DCHuffmanTables.length != ACHuffmanTables.length) { + throw new IllegalArgumentException("Invalid JPEG table arrays"); + } + if (qTables.length > 4 || DCHuffmanTables.length > 4) { + throw new IllegalArgumentException("Invalid JPEG table arrays"); + } + + // Do the shallow copy, it should be enough + this.qTables = qTables.clone(); + dcHuffmanTables = DCHuffmanTables.clone(); + acHuffmanTables = ACHuffmanTables.clone(); + } + + /** + * Unset all encoded tables. + */ + public void unsetEncodeTables() { + qTables = null; + dcHuffmanTables = null; + acHuffmanTables = null; + } + + /** + * Gets the DC Huffman tables. + * + * @return the DC Huffman tables which are set, or null. + */ + public JPEGHuffmanTable[] getDCHuffmanTables() { + return dcHuffmanTables == null ? null : dcHuffmanTables.clone(); + } + + /** + * Gets the AC Huffman tables. + * + * @return the AC Huffman tables which are set, or null. + */ + public JPEGHuffmanTable[] getACHuffmanTables() { + return acHuffmanTables == null ? null : acHuffmanTables.clone(); + } + + /** + * Gets the quantization tables. + * + * @return the quantization tables, or null. + */ + public JPEGQTable[] getQTables() { + return qTables == null ? null : qTables.clone(); + } + + @Override + public String[] getCompressionQualityDescriptions() { + super.getCompressionQualityDescriptions(); + return COMP_QUALITY_DESCRIPTIONS.clone(); + } + + @Override + public float[] getCompressionQualityValues() { + super.getCompressionQualityValues(); + return COMP_QUALITY_VALUES.clone(); + } + + /** + * Sets the flag indicated that the writer will generate optimized + * Huffman tables for the image as part of the writing process. + * + * @param optimize the flag of optimizing huffman tables. + */ + public void setOptimizeHuffmanTables(boolean optimize) { + optimizeHuffmanTables = optimize; + } + + /** + * Returns true if the writer generates optimized Huffman tables, + * false otherwise. + * + * @return the true if the writer generates optimized Huffman tables, + * false otherwise. + */ + public boolean getOptimizeHuffmanTables() { + return optimizeHuffmanTables; + } + + @Override + public boolean isCompressionLossless() { + if (getCompressionMode() != MODE_EXPLICIT) { + throw new IllegalStateException("Compression mode not MODE_EXPLICIT!"); + } + return false; + } + + @Override + public void unsetCompression() { + if (getCompressionMode() != MODE_EXPLICIT) { + throw new IllegalStateException("Compression mode not MODE_EXPLICIT!"); + } + compressionQuality = JPEGConsts.DEFAULT_JPEG_COMPRESSION_QUALITY; + } +} |