Path: blob/master/src/java.desktop/share/classes/javax/imageio/plugins/bmp/BMPImageWriteParam.java
41159 views
/*1* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425package javax.imageio.plugins.bmp;2627import java.util.Locale;28import javax.imageio.ImageWriteParam;2930import com.sun.imageio.plugins.bmp.BMPConstants;31import com.sun.imageio.plugins.bmp.BMPCompressionTypes;3233/**34* A subclass of {@code ImageWriteParam} for encoding images in35* the BMP format.36*37* <p> This class allows for the specification of various parameters38* while writing a BMP format image file. By default, the data layout39* is bottom-up, such that the pixels are stored in bottom-up order,40* the first scanline being stored last.41*42* <p>The particular compression scheme to be used can be specified by using43* the {@code setCompressionType()} method with the appropriate type44* string. The compression scheme specified will be honored if and only if it45* is compatible with the type of image being written. If the specified46* compression scheme is not compatible with the type of image being written47* then the {@code IOException} will be thrown by the BMP image writer.48* If the compression type is not set explicitly then {@code getCompressionType()}49* will return {@code null}. In this case the BMP image writer will select50* a compression type that supports encoding of the given image without loss51* of the color resolution.52* <p>The compression type strings and the image type(s) each supports are53* listed in the following54* table:55*56* <table class="striped">57* <caption>Compression Types</caption>58* <thead>59* <tr>60* <th scope="col">Type String61* <th scope="col">Description62* <th scope="col">Image Types63* </thead>64* <tbody>65* <tr>66* <th scope="row">BI_RGB67* <td>Uncompressed RLE68* <td>{@literal <= } 8-bits/sample69* <tr>70* <th scope="row">BI_RLE871* <td>8-bit Run Length Encoding72* <td>{@literal <=} 8-bits/sample73* <tr>74* <th scope="row">BI_RLE475* <td>4-bit Run Length Encoding76* <td>{@literal <=} 4-bits/sample77* <tr>78* <th scope="row">BI_BITFIELDS79* <td>Packed data80* <td>16 or 32 bits/sample81* </tbody>82* </table>83*/84public class BMPImageWriteParam extends ImageWriteParam {8586private boolean topDown = false;8788/**89* Constructs a {@code BMPImageWriteParam} set to use a given90* {@code Locale} and with default values for all parameters.91*92* @param locale a {@code Locale} to be used to localize93* compression type names and quality descriptions, or94* {@code null}.95*/96public BMPImageWriteParam(Locale locale) {97super(locale);9899// Set compression types ("BI_RGB" denotes uncompressed).100compressionTypes = BMPCompressionTypes.getCompressionTypes();101102// Set compression flag.103canWriteCompressed = true;104compressionMode = MODE_COPY_FROM_METADATA;105compressionType = compressionTypes[BMPConstants.BI_RGB];106}107108/**109* Constructs an {@code BMPImageWriteParam} object with default110* values for all parameters and a {@code null Locale}.111*/112public BMPImageWriteParam() {113this(null);114}115116/**117* If set, the data will be written out in a top-down manner, the first118* scanline being written first.119*120* @param topDown whether the data are written in top-down order.121*/122public void setTopDown(boolean topDown) {123this.topDown = topDown;124}125126/**127* Returns the value of the {@code topDown} parameter.128* The default is {@code false}.129*130* @return whether the data are written in top-down order.131*/132public boolean isTopDown() {133return topDown;134}135}136137138