All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.jaiimageio.plugins.bmp.BMPImageWriteParam Maven / Gradle / Ivy

Go to download

Java Advanced Imaging Image I/O Tools API core, but without the classes involved with javax.media.jai dependencies, JPEG2000 or codecLibJIIO, meaning that this library can be distributed under the modified BSD license and should be GPL compatible.

There is a newer version: 1.4.0
Show newest version
/*
 * $RCSfile: BMPImageWriteParam.java,v $
 *
 * 
 * Copyright (c) 2005 Sun Microsystems, Inc. All  Rights Reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met: 
 * 
 * - Redistribution of source code must retain the above copyright 
 *   notice, this  list of conditions and the following disclaimer.
 * 
 * - Redistribution in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in 
 *   the documentation and/or other materials provided with the
 *   distribution.
 * 
 * Neither the name of Sun Microsystems, Inc. or the names of 
 * contributors may be used to endorse or promote products derived 
 * from this software without specific prior written permission.
 * 
 * This software is provided "AS IS," without a warranty of any 
 * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND 
 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, 
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
 * EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL 
 * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF 
 * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR 
 * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
 * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
 * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
 * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES. 
 * 
 * You acknowledge that this software is not designed or intended for 
 * use in the design, construction, operation or maintenance of any 
 * nuclear facility. 
 *
 * $Revision: 1.2 $
 * $Date: 2006/04/14 21:32:04 $
 * $State: Exp $
 */
package com.github.jaiimageio.plugins.bmp;

import java.util.Locale;

import javax.imageio.ImageWriteParam;

import com.github.jaiimageio.impl.plugins.bmp.BMPConstants;

/**
 * A subclass of ImageWriteParam for encoding images in
 * the BMP format.
 *
 * 

This class allows for the specification of various parameters * while writing a BMP format image file. By default, the data layout * is bottom-up, such that the pixels are stored in bottom-up order, * the first scanline being stored last. * *

The particular compression scheme to be used can be specified by using * the setCompressionType() method with the appropriate type * string. The compression scheme specified will be honored if and only if it * is compatible with the type of image being written. If the specified * compression scheme is not compatible with the type of image being written * then the IOException will be thrown by the BMP image writer. * If the compression type is not set explicitly then getCompressionType() * will return null. In this case the BMP image writer will select * a compression type that supports encoding of the given image without loss * of the color resolution. *

The compression type strings and the image type(s) each supports are * listed in the following * table: * *

* * * * * * * *
Compression Types
Type String Description Image Types
BI_RGB Uncompressed RLE <= 8-bits/sample
BI_RLE8 8-bit Run Length Encoding <= 8-bits/sample
BI_RLE4 4-bit Run Length Encoding <= 4-bits/sample
BI_BITFIELDS Packed data 16 or 32 bits/sample
BI_JPEG JPEG encoded grayscale or RGB image
* *

When BI_BITFIELDS is used, if the image encoded has a * DirectColorModel, the bit mask in the color model will be * written into the stream. Otherwise, only 5-5-5 16-bit image or 8-8-8 * 32-bit images are supported. * */ public class BMPImageWriteParam extends ImageWriteParam { // deprecated version constants /** * Constant for BMP version 2. * * @deprecated */ public static final int VERSION_2 = 0; /** * Constant for BMP version 3. * * @deprecated */ public static final int VERSION_3 = 1; /** * Constant for BMP version 4. * * @deprecated */ public static final int VERSION_4 = 2; /** * Constant for BMP version 5. * * @deprecated */ public static final int VERSION_5 = 3; private boolean topDown = false; /** * Constructs a BMPImageWriteParam set to use a given * Locale and with default values for all parameters. * * @param locale a Locale to be used to localize * compression type names and quality descriptions, or * null. */ public BMPImageWriteParam(Locale locale) { super(locale); // Set compression types ("BI_RGB" denotes uncompressed). compressionTypes = BMPConstants.compressionTypeNames; // Set compression flag. canWriteCompressed = true; compressionMode = MODE_COPY_FROM_METADATA; compressionType = compressionTypes[BMPConstants.BI_RGB]; } /** * Constructs an BMPImageWriteParam object with default * values for all parameters and a null Locale. */ public BMPImageWriteParam() { this(null); } /** * Returns the BMP version to be used. The default is * VERSION_3. * * @deprecated * @return the BMP version number. */ public int getVersion() { return VERSION_3; } /** * If set, the data will be written out in a top-down manner, the first * scanline being written first. * * Any compression other than BI_RGB or * BI_BITFIELDS is incompatible with the data being * written in top-down order. Setting the topDown argument * to true will be honored only when the compression * type at the time of writing the image is one of the two mentioned * above. Otherwise, the topDown setting will be ignored. * * @param topDown whether the data are written in top-down order. */ public void setTopDown(boolean topDown) { this.topDown = topDown; } /** * Returns the value of the topDown parameter. * The default is false. * * @return whether the data are written in top-down order. */ public boolean isTopDown() { return topDown; } // Override superclass implementation to add a new check that compression // is not being set when image has been specified to be encoded in a top // down fashion /** * Sets the compression type to one of the values indicated by * getCompressionTypes. If a value of * null is passed in, any previous setting is * removed. * *

The method first invokes * {@link javax.imageio.ImageWriteParam.#setCompressionType(String) * setCompressionType()} * with the supplied value of compressionType. Next, * if {@link #isTopDown()} returns true and the * value of compressionType is incompatible with top-down * order, {@link #setTopDown(boolean)} is invoked with parameter * topDown set to false. The image will * then be written in bottom-up order with the specified * compressionType.

* * @param compressionType one of the Strings returned * by getCompressionTypes, or null to * remove any previous setting. * * @exception UnsupportedOperationException if the writer does not * support compression. * @exception IllegalStateException if the compression mode is not * MODE_EXPLICIT. * @exception UnsupportedOperationException if there are no * settable compression types. * @exception IllegalArgumentException if * compressionType is non-null but is not * one of the values returned by getCompressionTypes. * * @see #isTopDown * @see #setTopDown * @see #getCompressionTypes * @see #getCompressionType * @see #unsetCompression */ public void setCompressionType(String compressionType) { super.setCompressionType(compressionType); if (!(compressionType.equals("BI_RGB")) && !(compressionType.equals("BI_BITFIELDS")) && topDown == true) { topDown = false; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy