mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			496 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			496 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
/* ImageWriteParam.java --
 | 
						|
   Copyright (C) 2004  Free Software Foundation, Inc.
 | 
						|
 | 
						|
This file is part of GNU Classpath.
 | 
						|
 | 
						|
GNU Classpath is free software; you can redistribute it and/or modify
 | 
						|
it under the terms of the GNU General Public License as published by
 | 
						|
the Free Software Foundation; either version 2, or (at your option)
 | 
						|
any later version.
 | 
						|
 | 
						|
GNU Classpath is distributed in the hope that it will be useful, but
 | 
						|
WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
General Public License for more details.
 | 
						|
 | 
						|
You should have received a copy of the GNU General Public License
 | 
						|
along with GNU Classpath; see the file COPYING.  If not, write to the
 | 
						|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						|
02110-1301 USA.
 | 
						|
 | 
						|
Linking this library statically or dynamically with other modules is
 | 
						|
making a combined work based on this library.  Thus, the terms and
 | 
						|
conditions of the GNU General Public License cover the whole
 | 
						|
combination.
 | 
						|
 | 
						|
As a special exception, the copyright holders of this library give you
 | 
						|
permission to link this library with independent modules to produce an
 | 
						|
executable, regardless of the license terms of these independent
 | 
						|
modules, and to copy and distribute the resulting executable under
 | 
						|
terms of your choice, provided that you also meet, for each linked
 | 
						|
independent module, the terms and conditions of the license of that
 | 
						|
module.  An independent module is a module which is not derived from
 | 
						|
or based on this library.  If you modify this library, you may extend
 | 
						|
this exception to your version of the library, but you are not
 | 
						|
obligated to do so.  If you do not wish to do so, delete this
 | 
						|
exception statement from your version. */
 | 
						|
 | 
						|
 | 
						|
package javax.imageio;
 | 
						|
 | 
						|
import java.awt.Dimension;
 | 
						|
import java.util.Locale;
 | 
						|
 | 
						|
/**
 | 
						|
 * DOCUMENT ME
 | 
						|
 */
 | 
						|
public class ImageWriteParam extends IIOParam
 | 
						|
{
 | 
						|
 | 
						|
  /**
 | 
						|
   * Can be passed to setTilingMode, setProgressiveMode and
 | 
						|
   * setCompressionMode to disable feature.
 | 
						|
   */
 | 
						|
  public static final int MODE_DISABLED = 0;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Can be passed to setTilingMode, setProgressiveMode and
 | 
						|
   * setCompressionMode to enable feature.
 | 
						|
   */
 | 
						|
  public static final int MODE_DEFAULT = 1;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Can be passed to setTilingMode, setCompressionMode to disable feature.
 | 
						|
   */
 | 
						|
  public static final int MODE_EXPLICIT = 2;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Can be passed to setTilingMode, setProgressiveMode and
 | 
						|
   * setCompressionMode to enable feature.
 | 
						|
   */
 | 
						|
  public static final int MODE_COPY_FROM_METADATA = 3;
 | 
						|
 | 
						|
  /**
 | 
						|
   * True if tiling grid offset parameters can be set.
 | 
						|
   */
 | 
						|
  protected boolean canOffsetTiles;
 | 
						|
 | 
						|
  /**
 | 
						|
   * True if this writer can write images using compression.
 | 
						|
   */
 | 
						|
  protected boolean canWriteCompressed;
 | 
						|
 | 
						|
  /**
 | 
						|
   * True if images can be written as a progressive sequence
 | 
						|
   * of increasing quality.
 | 
						|
   */
 | 
						|
  protected boolean canWriteProgressive;
 | 
						|
 | 
						|
  /**
 | 
						|
   * True if tile width and height parameters can be set.
 | 
						|
   */
 | 
						|
  protected boolean canWriteTiles;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Controls compression settings, which must be set to one of the four
 | 
						|
   * MODE_* values.
 | 
						|
   */
 | 
						|
  protected int compressionMode = MODE_COPY_FROM_METADATA;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Contains the current compression quality setting.
 | 
						|
   */
 | 
						|
  protected float compressionQuality;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Contains the name of the current compression type.
 | 
						|
   */
 | 
						|
  protected String compressionType;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Array of the names of the available compression types.
 | 
						|
   */
 | 
						|
  protected String[] compressionTypes;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Localizes compression type names and quality descriptions,
 | 
						|
   * or null to use default Locale.
 | 
						|
   */
 | 
						|
  protected Locale locale;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Preferred tile size range pairs.
 | 
						|
   */
 | 
						|
  protected Dimension[] preferredTileSizes;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The mode controlling progressive encoding, which must
 | 
						|
   * be set to one of the four MODE_* values, except
 | 
						|
   * MODE_EXPLICIT.
 | 
						|
   */
 | 
						|
  protected int progressiveMode = MODE_COPY_FROM_METADATA;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The amount by which the tile grid origin should be offset
 | 
						|
   * horizontally from the image origin if tiling has been set.
 | 
						|
   */
 | 
						|
  protected int tileGridXOffset;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The amount by which the tile grid origin should be offset
 | 
						|
   * vertically from the image origin if tiling has been set.
 | 
						|
   */
 | 
						|
  protected int tileGridYOffset;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The height of each tile if tiling has been set.
 | 
						|
   */
 | 
						|
  protected int tileHeight;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The width of each tile if tiling has been set.
 | 
						|
   */
 | 
						|
  protected int tileWidth;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The mode controlling tiling settings, which must be
 | 
						|
   * set to one of the four MODE_* values.
 | 
						|
   */
 | 
						|
  protected int tilingMode;
 | 
						|
 | 
						|
  /**
 | 
						|
   * True if the tiling parameters have been specified.
 | 
						|
   */
 | 
						|
  protected boolean tilingSet;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates an empty <code>ImageWriteParam</code> object.
 | 
						|
   * The subclass is responsible to initialize all fields.
 | 
						|
   */
 | 
						|
  protected ImageWriteParam()
 | 
						|
  {
 | 
						|
    // Do nothing here.
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates an <code>ImageWriteParam</code> object with the given locale.
 | 
						|
   *
 | 
						|
   * @param locale the locale to use for user visible strings
 | 
						|
   */
 | 
						|
  public ImageWriteParam(Locale locale)
 | 
						|
  {
 | 
						|
    this.locale = locale;
 | 
						|
  }
 | 
						|
 | 
						|
  public float getBitRate(float quality)
 | 
						|
  {
 | 
						|
    checkNotExplicitCompression();
 | 
						|
    checkCompressionTypesSet();
 | 
						|
 | 
						|
    return -1.0f;
 | 
						|
  }
 | 
						|
 | 
						|
  private void checkSupportsCompression()
 | 
						|
  {
 | 
						|
    if (! canWriteCompressed())
 | 
						|
      throw new UnsupportedOperationException("compression not supported");
 | 
						|
  }
 | 
						|
 | 
						|
  private void checkNotExplicitCompression()
 | 
						|
  {
 | 
						|
    if (getCompressionMode() != MODE_EXPLICIT)
 | 
						|
      throw new IllegalStateException("compression mode is not MODE_EXPLICIT");
 | 
						|
  }
 | 
						|
 | 
						|
  private void checkCompressionTypesSet()
 | 
						|
  {
 | 
						|
    if (getCompressionType() == null
 | 
						|
        && getCompressionTypes() != null)
 | 
						|
      throw new IllegalStateException("no compression type set");
 | 
						|
  }
 | 
						|
 | 
						|
  private void checkSupportsProgressiveEncoding()
 | 
						|
  {
 | 
						|
    if (! canWriteProgressive())
 | 
						|
      throw new UnsupportedOperationException
 | 
						|
        ("progressive output not supported");
 | 
						|
  }
 | 
						|
 | 
						|
  private void checkSupportsTiling()
 | 
						|
  {
 | 
						|
    if (! canWriteTiles())
 | 
						|
      throw new UnsupportedOperationException("tiling not supported");
 | 
						|
  }
 | 
						|
 | 
						|
  private void checkNotExplicitTiling()
 | 
						|
  {
 | 
						|
    if (getTilingMode() != MODE_EXPLICIT)
 | 
						|
      throw new IllegalStateException("tiling mode not MODE_EXPLICIT");
 | 
						|
  }
 | 
						|
 | 
						|
  private void checkTilingInitialized()
 | 
						|
  {
 | 
						|
    if (! tilingSet)
 | 
						|
      throw new IllegalStateException("tiling parameters not set");
 | 
						|
  }
 | 
						|
 | 
						|
  private void checkMode(int mode)
 | 
						|
  {
 | 
						|
    if (mode < MODE_DISABLED || mode > MODE_COPY_FROM_METADATA)
 | 
						|
      throw new IllegalArgumentException("mode not supported");
 | 
						|
  }
 | 
						|
 | 
						|
  public boolean canOffsetTiles()
 | 
						|
  {
 | 
						|
    return canOffsetTiles;
 | 
						|
  }
 | 
						|
 | 
						|
  public boolean canWriteCompressed()
 | 
						|
  {
 | 
						|
    return canWriteCompressed;
 | 
						|
  }
 | 
						|
 | 
						|
  public boolean canWriteProgressive()
 | 
						|
  {
 | 
						|
    return canWriteProgressive;
 | 
						|
  }
 | 
						|
 | 
						|
  public boolean canWriteTiles()
 | 
						|
  {
 | 
						|
    return canWriteTiles;
 | 
						|
  }
 | 
						|
 | 
						|
  public int getCompressionMode()
 | 
						|
  {
 | 
						|
    checkSupportsCompression();
 | 
						|
 | 
						|
    return compressionMode;
 | 
						|
  }
 | 
						|
 | 
						|
  public float getCompressionQuality()
 | 
						|
  {
 | 
						|
    checkNotExplicitCompression();
 | 
						|
    checkCompressionTypesSet();
 | 
						|
 | 
						|
    return compressionQuality;
 | 
						|
  }
 | 
						|
 | 
						|
  public String[] getCompressionQualityDescriptions()
 | 
						|
  {
 | 
						|
    checkNotExplicitCompression();
 | 
						|
    checkCompressionTypesSet();
 | 
						|
 | 
						|
    return null;
 | 
						|
  }
 | 
						|
 | 
						|
  public float[] getCompressionQualityValues()
 | 
						|
  {
 | 
						|
    checkNotExplicitCompression();
 | 
						|
    checkCompressionTypesSet();
 | 
						|
 | 
						|
    return null;
 | 
						|
  }
 | 
						|
 | 
						|
  public String getCompressionType()
 | 
						|
  {
 | 
						|
    checkNotExplicitCompression();
 | 
						|
 | 
						|
    return compressionType;
 | 
						|
  }
 | 
						|
 | 
						|
  public String[] getCompressionTypes()
 | 
						|
  {
 | 
						|
    checkSupportsCompression();
 | 
						|
 | 
						|
    return compressionTypes != null ? (String[]) compressionTypes.clone() : null;
 | 
						|
  }
 | 
						|
 | 
						|
  public Locale getLocale()
 | 
						|
  {
 | 
						|
    return locale;
 | 
						|
  }
 | 
						|
 | 
						|
  public String getLocalizedCompressionTypeName()
 | 
						|
  {
 | 
						|
    checkNotExplicitCompression();
 | 
						|
    checkCompressionTypesSet();
 | 
						|
 | 
						|
    return getCompressionType();
 | 
						|
  }
 | 
						|
 | 
						|
  public Dimension[] getPreferredTileSizes()
 | 
						|
  {
 | 
						|
    checkSupportsTiling();
 | 
						|
 | 
						|
    return preferredTileSizes;
 | 
						|
  }
 | 
						|
 | 
						|
  public int getProgressiveMode()
 | 
						|
  {
 | 
						|
    checkSupportsProgressiveEncoding();
 | 
						|
 | 
						|
    return progressiveMode;
 | 
						|
  }
 | 
						|
 | 
						|
  public int getTileGridXOffset()
 | 
						|
  {
 | 
						|
    checkNotExplicitTiling();
 | 
						|
    checkTilingInitialized();
 | 
						|
 | 
						|
    return tileGridXOffset;
 | 
						|
  }
 | 
						|
 | 
						|
  public int getTileGridYOffset()
 | 
						|
  {
 | 
						|
    checkNotExplicitTiling();
 | 
						|
    checkTilingInitialized();
 | 
						|
 | 
						|
    return tileGridYOffset;
 | 
						|
  }
 | 
						|
 | 
						|
  public int getTileHeight()
 | 
						|
  {
 | 
						|
    checkNotExplicitTiling();
 | 
						|
    checkTilingInitialized();
 | 
						|
 | 
						|
    return tileHeight;
 | 
						|
  }
 | 
						|
 | 
						|
  public int getTileWidth()
 | 
						|
  {
 | 
						|
    checkNotExplicitTiling();
 | 
						|
    checkTilingInitialized();
 | 
						|
 | 
						|
    return tileWidth;
 | 
						|
  }
 | 
						|
 | 
						|
  public int getTilingMode()
 | 
						|
  {
 | 
						|
    checkSupportsTiling();
 | 
						|
 | 
						|
    return tilingMode;
 | 
						|
  }
 | 
						|
 | 
						|
  public boolean isCompressionLossless()
 | 
						|
  {
 | 
						|
    checkNotExplicitCompression();
 | 
						|
    checkCompressionTypesSet();
 | 
						|
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
 | 
						|
  public void setCompressionMode(int mode)
 | 
						|
  {
 | 
						|
    checkSupportsCompression();
 | 
						|
    checkMode(mode);
 | 
						|
 | 
						|
    compressionMode = mode;
 | 
						|
 | 
						|
    if (mode == MODE_EXPLICIT)
 | 
						|
      unsetCompression();
 | 
						|
  }
 | 
						|
 | 
						|
  public void setCompressionQuality(float quality)
 | 
						|
  {
 | 
						|
    checkNotExplicitCompression();
 | 
						|
    checkCompressionTypesSet();
 | 
						|
 | 
						|
    if (quality < 0.0f || quality > 1.0f)
 | 
						|
      throw new IllegalArgumentException("quality out of range");
 | 
						|
 | 
						|
    compressionQuality = quality;
 | 
						|
  }
 | 
						|
 | 
						|
  public void setCompressionType(String compressionType)
 | 
						|
  {
 | 
						|
    checkNotExplicitCompression();
 | 
						|
 | 
						|
    String[] types = getCompressionTypes();
 | 
						|
 | 
						|
    if (types == null)
 | 
						|
      throw new UnsupportedOperationException("no settable compression types");
 | 
						|
 | 
						|
    if (compressionType == null)
 | 
						|
      this.compressionType = null;
 | 
						|
 | 
						|
    for (int i = types.length - 1; i >= 0; --i)
 | 
						|
      if (types[i].equals(compressionType))
 | 
						|
        {
 | 
						|
          this.compressionType = compressionType;
 | 
						|
          return;
 | 
						|
        }
 | 
						|
 | 
						|
    throw new IllegalArgumentException("unknown compression type");
 | 
						|
  }
 | 
						|
 | 
						|
  public void setProgressiveMode(int mode)
 | 
						|
  {
 | 
						|
    checkSupportsProgressiveEncoding();
 | 
						|
    checkMode(mode);
 | 
						|
 | 
						|
    progressiveMode = mode;
 | 
						|
  }
 | 
						|
 | 
						|
  public void setTiling(int tileWidth, int tileHeight,
 | 
						|
                        int tileGridXOffset, int tileGridYOffset)
 | 
						|
  {
 | 
						|
    checkNotExplicitTiling();
 | 
						|
 | 
						|
    if (! canOffsetTiles
 | 
						|
        && tileGridXOffset != 0
 | 
						|
        && tileGridYOffset != 0)
 | 
						|
      throw new UnsupportedOperationException("tile offsets not supported");
 | 
						|
 | 
						|
    if (tileWidth < 0 || tileHeight < 0)
 | 
						|
      throw new IllegalArgumentException("negative tile dimension");
 | 
						|
 | 
						|
    if (preferredTileSizes != null)
 | 
						|
      {
 | 
						|
        boolean found = false;
 | 
						|
 | 
						|
        for (int i = 0; i < preferredTileSizes.length; i += 2)
 | 
						|
          {
 | 
						|
            if (tileWidth >= preferredTileSizes[i].width
 | 
						|
                && tileWidth <= preferredTileSizes[i + 1].width
 | 
						|
                && tileHeight >= preferredTileSizes[i].height
 | 
						|
                && tileHeight <= preferredTileSizes[i + 1].height)
 | 
						|
              found = true;
 | 
						|
          }
 | 
						|
 | 
						|
        if (! found)
 | 
						|
          throw new IllegalArgumentException("illegal tile size");
 | 
						|
      }
 | 
						|
 | 
						|
    this.tilingSet = true;
 | 
						|
    this.tileWidth = tileWidth;
 | 
						|
    this.tileHeight = tileHeight;
 | 
						|
    this.tileGridXOffset = tileGridXOffset;
 | 
						|
    this.tileGridYOffset = tileGridYOffset;
 | 
						|
  }
 | 
						|
 | 
						|
  public void setTilingMode(int mode)
 | 
						|
  {
 | 
						|
    checkSupportsTiling();
 | 
						|
    checkMode(mode);
 | 
						|
    tilingMode = mode;
 | 
						|
  }
 | 
						|
 | 
						|
  public void unsetCompression()
 | 
						|
  {
 | 
						|
    checkNotExplicitCompression();
 | 
						|
 | 
						|
    compressionType = null;
 | 
						|
    compressionQuality = 1.0F;
 | 
						|
  }
 | 
						|
 | 
						|
  public void unsetTiling()
 | 
						|
  {
 | 
						|
    checkNotExplicitTiling();
 | 
						|
 | 
						|
    tileWidth = 0;
 | 
						|
    tileHeight = 0;
 | 
						|
    tileGridXOffset = 0;
 | 
						|
    tileGridYOffset = 0;
 | 
						|
  }
 | 
						|
}
 |