< prev index next >
src/java.desktop/share/classes/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java
Print this page
*** 33,52 ****
/**
* This class adds the ability to set JPEG quantization and Huffman
* tables when using the built-in JPEG writer plug-in, and to request that
* optimized Huffman tables be computed for an image. An instance of
* this class will be returned from the
! * <code>getDefaultImageWriteParam</code> methods of the built-in JPEG
! * <code>ImageWriter</code>.
* <p> The principal purpose of these additions is to allow the
* specification of tables to use in encoding abbreviated streams.
* The built-in JPEG writer will also accept an ordinary
! * <code>ImageWriteParam</code>, in which case the writer will
* construct the necessary tables internally.
*
! * <p> In either case, the quality setting in an <code>ImageWriteParam</code>
* has the same meaning as for the underlying library: 1.00 means a
* quantization table of all 1's, 0.75 means the "standard", visually
* lossless quantization table, and 0.00 means aquantization table of
* all 255's.
*
--- 33,52 ----
/**
* This class adds the ability to set JPEG quantization and Huffman
* tables when using the built-in JPEG writer plug-in, and to request that
* optimized Huffman tables be computed for an image. An instance of
* this class will be returned from the
! * {@code getDefaultImageWriteParam} methods of the built-in JPEG
! * {@code ImageWriter}.
* <p> The principal purpose of these additions is to allow the
* specification of tables to use in encoding abbreviated streams.
* The built-in JPEG writer will also accept an ordinary
! * {@code ImageWriteParam}, in which case the writer will
* construct the necessary tables internally.
*
! * <p> In either case, the quality setting in an {@code ImageWriteParam}
* has the same meaning as for the underlying library: 1.00 means a
* quantization table of all 1's, 0.75 means the "standard", visually
* lossless quantization table, and 0.00 means aquantization table of
* all 255's.
*
*** 54,84 ****
* first writing an abbreviated stream containing only the tables, in
* some applications the tables are fixed ahead of time. This class
* allows the tables to be specified directly from client code.
*
* <p> Normally, the tables are specified in the
! * <code>IIOMetadata</code> objects passed in to the writer, and any
* tables included in these objects are written to the stream.
* If no tables are specified in the metadata, then an abbreviated
* stream is written. If no tables are included in the metadata and
! * no tables are specified in a <code>JPEGImageWriteParam</code>, then
* an abbreviated stream is encoded using the "standard" visually
* lossless tables. This class is necessary for specifying tables
* when an abbreviated stream must be written without writing any tables
* to a stream first. In order to use this class, the metadata object
* passed into the writer must contain no tables, and no stream metadata
* must be provided. See {@link JPEGQTable JPEGQTable} and
* {@link JPEGHuffmanTable JPEGHuffmanTable} for more
* information on the default tables.
*
! * <p> The default <code>JPEGImageWriteParam</code> returned by the
! * <code>getDefaultWriteParam</code> method of the writer contains no
* tables. Default tables are included in the default
! * <code>IIOMetadata</code> objects returned by the writer.
*
* <p> If the metadata does contain tables, the tables given in a
! * <code>JPEGImageWriteParam</code> are ignored. Furthermore, once a
* set of tables has been written, only tables in the metadata can
* override them for subsequent writes, whether to the same stream or
* a different one. In order to specify new tables using this class,
* the {@link javax.imageio.ImageWriter#reset reset}
* method of the writer must be called.
--- 54,84 ----
* first writing an abbreviated stream containing only the tables, in
* some applications the tables are fixed ahead of time. This class
* allows the tables to be specified directly from client code.
*
* <p> Normally, the tables are specified in the
! * {@code IIOMetadata} objects passed in to the writer, and any
* tables included in these objects are written to the stream.
* If no tables are specified in the metadata, then an abbreviated
* stream is written. If no tables are included in the metadata and
! * no tables are specified in a {@code JPEGImageWriteParam}, then
* an abbreviated stream is encoded using the "standard" visually
* lossless tables. This class is necessary for specifying tables
* when an abbreviated stream must be written without writing any tables
* to a stream first. In order to use this class, the metadata object
* passed into the writer must contain no tables, and no stream metadata
* must be provided. See {@link JPEGQTable JPEGQTable} and
* {@link JPEGHuffmanTable JPEGHuffmanTable} for more
* information on the default tables.
*
! * <p> The default {@code JPEGImageWriteParam} returned by the
! * {@code getDefaultWriteParam} method of the writer contains no
* tables. Default tables are included in the default
! * {@code IIOMetadata} objects returned by the writer.
*
* <p> If the metadata does contain tables, the tables given in a
! * {@code JPEGImageWriteParam} are ignored. Furthermore, once a
* set of tables has been written, only tables in the metadata can
* override them for subsequent writes, whether to the same stream or
* a different one. In order to specify new tables using this class,
* the {@link javax.imageio.ImageWriter#reset reset}
* method of the writer must be called.
*** 102,120 ****
"Medium quality", // 0.30 -> 0.75
"Visually lossless" // 0.75 -> 1.00
};
/**
! * Constructs a <code>JPEGImageWriteParam</code>. Tiling is not
* supported. Progressive encoding is supported. The default
* progressive mode is MODE_DISABLED. A single form of compression,
* named "JPEG", is supported. The default compression quality is
* 0.75.
*
! * @param locale a <code>Locale</code> to be used by the
* superclass to localize compression type names and quality
! * descriptions, or <code>null</code>.
*/
public JPEGImageWriteParam(Locale locale) {
super(locale);
this.canWriteProgressive = true;
this.progressiveMode = MODE_DISABLED;
--- 102,120 ----
"Medium quality", // 0.30 -> 0.75
"Visually lossless" // 0.75 -> 1.00
};
/**
! * Constructs a {@code JPEGImageWriteParam}. Tiling is not
* supported. Progressive encoding is supported. The default
* progressive mode is MODE_DISABLED. A single form of compression,
* named "JPEG", is supported. The default compression quality is
* 0.75.
*
! * @param locale a {@code Locale} to be used by the
* superclass to localize compression type names and quality
! * descriptions, or {@code null}.
*/
public JPEGImageWriteParam(Locale locale) {
super(locale);
this.canWriteProgressive = true;
this.progressiveMode = MODE_DISABLED;
*** 126,156 ****
/**
* Removes any previous compression quality setting.
*
* <p> The default implementation resets the compression quality
! * to <code>0.75F</code>.
*
* @exception IllegalStateException if the compression mode is not
! * <code>MODE_EXPLICIT</code>.
*/
public void unsetCompression() {
if (getCompressionMode() != MODE_EXPLICIT) {
throw new IllegalStateException
("Compression mode not MODE_EXPLICIT!");
}
this.compressionQuality = JPEG.DEFAULT_QUALITY;
}
/**
! * Returns <code>false</code> since the JPEG plug-in only supports
* lossy compression.
*
! * @return <code>false</code>.
*
* @exception IllegalStateException if the compression mode is not
! * <code>MODE_EXPLICIT</code>.
*/
public boolean isCompressionLossless() {
if (getCompressionMode() != MODE_EXPLICIT) {
throw new IllegalStateException
("Compression mode not MODE_EXPLICIT!");
--- 126,156 ----
/**
* Removes any previous compression quality setting.
*
* <p> The default implementation resets the compression quality
! * to {@code 0.75F}.
*
* @exception IllegalStateException if the compression mode is not
! * {@code MODE_EXPLICIT}.
*/
public void unsetCompression() {
if (getCompressionMode() != MODE_EXPLICIT) {
throw new IllegalStateException
("Compression mode not MODE_EXPLICIT!");
}
this.compressionQuality = JPEG.DEFAULT_QUALITY;
}
/**
! * Returns {@code false} since the JPEG plug-in only supports
* lossy compression.
*
! * @return {@code false}.
*
* @exception IllegalStateException if the compression mode is not
! * {@code MODE_EXPLICIT}.
*/
public boolean isCompressionLossless() {
if (getCompressionMode() != MODE_EXPLICIT) {
throw new IllegalStateException
("Compression mode not MODE_EXPLICIT!");
*** 180,213 ****
throw new IllegalStateException("No compression type set!");
}
return qualityVals.clone();
}
/**
! * Returns <code>true</code> if tables are currently set.
*
! * @return <code>true</code> if tables are present.
*/
public boolean areTablesSet() {
return (qTables != null);
}
/**
* Sets the quantization and Huffman tables to use in encoding
* abbreviated streams. There may be a maximum of 4 tables of
* each type. These tables are ignored if tables are specified in
! * the metadata. All arguments must be non-<code>null</code>.
* The two arrays of Huffman tables must have the same number of
* elements. The table specifiers in the frame and scan headers
* in the metadata are assumed to be equivalent to indices into
* these arrays. The argument arrays are copied by this method.
*
* @param qTables An array of quantization table objects.
* @param DCHuffmanTables An array of Huffman table objects.
* @param ACHuffmanTables An array of Huffman table objects.
*
* @exception IllegalArgumentException if any of the arguments
! * is <code>null</code> or has more than 4 elements, or if the
* numbers of DC and AC tables differ.
*
* @see #unsetEncodeTables
*/
public void setEncodeTables(JPEGQTable[] qTables,
--- 180,213 ----
throw new IllegalStateException("No compression type set!");
}
return qualityVals.clone();
}
/**
! * Returns {@code true} if tables are currently set.
*
! * @return {@code true} if tables are present.
*/
public boolean areTablesSet() {
return (qTables != null);
}
/**
* Sets the quantization and Huffman tables to use in encoding
* abbreviated streams. There may be a maximum of 4 tables of
* each type. These tables are ignored if tables are specified in
! * the metadata. All arguments must be non-{@code null}.
* The two arrays of Huffman tables must have the same number of
* elements. The table specifiers in the frame and scan headers
* in the metadata are assumed to be equivalent to indices into
* these arrays. The argument arrays are copied by this method.
*
* @param qTables An array of quantization table objects.
* @param DCHuffmanTables An array of Huffman table objects.
* @param ACHuffmanTables An array of Huffman table objects.
*
* @exception IllegalArgumentException if any of the arguments
! * is {@code null} or has more than 4 elements, or if the
* numbers of DC and AC tables differ.
*
* @see #unsetEncodeTables
*/
public void setEncodeTables(JPEGQTable[] qTables,
*** 239,267 ****
this.ACHuffmanTables = null;
}
/**
* Returns a copy of the array of quantization tables set on the
! * most recent call to <code>setEncodeTables</code>, or
! * <code>null</code> if tables are not currently set.
*
! * @return an array of <code>JPEGQTable</code> objects, or
! * <code>null</code>.
*
* @see #setEncodeTables
*/
public JPEGQTable[] getQTables() {
return (qTables != null) ? qTables.clone() : null;
}
/**
* Returns a copy of the array of DC Huffman tables set on the
! * most recent call to <code>setEncodeTables</code>, or
! * <code>null</code> if tables are not currently set.
*
! * @return an array of <code>JPEGHuffmanTable</code> objects, or
! * <code>null</code>.
*
* @see #setEncodeTables
*/
public JPEGHuffmanTable[] getDCHuffmanTables() {
return (DCHuffmanTables != null)
--- 239,267 ----
this.ACHuffmanTables = null;
}
/**
* Returns a copy of the array of quantization tables set on the
! * most recent call to {@code setEncodeTables}, or
! * {@code null} if tables are not currently set.
*
! * @return an array of {@code JPEGQTable} objects, or
! * {@code null}.
*
* @see #setEncodeTables
*/
public JPEGQTable[] getQTables() {
return (qTables != null) ? qTables.clone() : null;
}
/**
* Returns a copy of the array of DC Huffman tables set on the
! * most recent call to {@code setEncodeTables}, or
! * {@code null} if tables are not currently set.
*
! * @return an array of {@code JPEGHuffmanTable} objects, or
! * {@code null}.
*
* @see #setEncodeTables
*/
public JPEGHuffmanTable[] getDCHuffmanTables() {
return (DCHuffmanTables != null)
*** 269,283 ****
: null;
}
/**
* Returns a copy of the array of AC Huffman tables set on the
! * most recent call to <code>setEncodeTables</code>, or
! * <code>null</code> if tables are not currently set.
*
! * @return an array of <code>JPEGHuffmanTable</code> objects, or
! * <code>null</code>.
*
* @see #setEncodeTables
*/
public JPEGHuffmanTable[] getACHuffmanTables() {
return (ACHuffmanTables != null)
--- 269,283 ----
: null;
}
/**
* Returns a copy of the array of AC Huffman tables set on the
! * most recent call to {@code setEncodeTables}, or
! * {@code null} if tables are not currently set.
*
! * @return an array of {@code JPEGHuffmanTable} objects, or
! * {@code null}.
*
* @see #setEncodeTables
*/
public JPEGHuffmanTable[] getACHuffmanTables() {
return (ACHuffmanTables != null)
*** 286,299 ****
}
/**
* Tells the writer to generate optimized Huffman tables
* for the image as part of the writing process. The
! * default is <code>false</code>. If this flag is set
! * to <code>true</code>, it overrides any tables specified
* in the metadata. Note that this means that any image
! * written with this flag set to <code>true</code> will
* always contain Huffman tables.
*
* @param optimize A boolean indicating whether to generate
* optimized Huffman tables when writing.
*
--- 286,299 ----
}
/**
* Tells the writer to generate optimized Huffman tables
* for the image as part of the writing process. The
! * default is {@code false}. If this flag is set
! * to {@code true}, it overrides any tables specified
* in the metadata. Note that this means that any image
! * written with this flag set to {@code true} will
* always contain Huffman tables.
*
* @param optimize A boolean indicating whether to generate
* optimized Huffman tables when writing.
*
*** 303,317 ****
optimizeHuffman = optimize;
}
/**
* Returns the value passed into the most recent call
! * to <code>setOptimizeHuffmanTables</code>, or
! * <code>false</code> if <code>setOptimizeHuffmanTables</code>
* has never been called.
*
! * @return <code>true</code> if the writer will generate optimized
* Huffman tables.
*
* @see #setOptimizeHuffmanTables
*/
public boolean getOptimizeHuffmanTables() {
--- 303,317 ----
optimizeHuffman = optimize;
}
/**
* Returns the value passed into the most recent call
! * to {@code setOptimizeHuffmanTables}, or
! * {@code false} if {@code setOptimizeHuffmanTables}
* has never been called.
*
! * @return {@code true} if the writer will generate optimized
* Huffman tables.
*
* @see #setOptimizeHuffmanTables
*/
public boolean getOptimizeHuffmanTables() {
< prev index next >