/* * 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. */ /** * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ package javax.imageio; import java.awt.*; /** * The IIOParam abstract class is superclass for ImageReadParam and * ImageWriteParam classes and provides methods and variables which they share. * * @since Android 1.0 */ public abstract class IIOParam { /** * The source region. */ protected Rectangle sourceRegion; /** * The source x subsampling. */ protected int sourceXSubsampling = 1; /** * The source y subsampling. */ protected int sourceYSubsampling = 1; /** * The subsampling x offset. */ protected int subsamplingXOffset; /** * The subsampling y offset. */ protected int subsamplingYOffset; /** * The source bands. */ protected int[] sourceBands; /** * The destination type. */ protected ImageTypeSpecifier destinationType; /** * The destination offset. */ protected Point destinationOffset = new Point(0, 0); /** * The default controller. */ protected IIOParamController defaultController; /** * The controller. */ protected IIOParamController controller; /** * Instantiates a new IIOParam. */ protected IIOParam() { } /** * Sets the source region as a Rectangle object. * * @param sourceRegion * the Rectangle which specifies the source region. */ public void setSourceRegion(Rectangle sourceRegion) { if (sourceRegion != null) { if (sourceRegion.x < 0) { throw new IllegalArgumentException("x < 0"); } if (sourceRegion.y < 0) { throw new IllegalArgumentException("y < 0"); } if (sourceRegion.width <= 0) { throw new IllegalArgumentException("width <= 0"); } if (sourceRegion.height <= 0) { throw new IllegalArgumentException("height <= 0"); } if (sourceRegion.width <= subsamplingXOffset) { throw new IllegalArgumentException("width <= subsamplingXOffset"); } if (sourceRegion.height <= subsamplingYOffset) { throw new IllegalArgumentException("height <= subsamplingXOffset"); } // -- clone it to avoid unexpected modifications this.sourceRegion = (Rectangle)sourceRegion.clone(); } else { this.sourceRegion = null; } } /** * Gets the source region. * * @return the source region as Rectangle. */ public Rectangle getSourceRegion() { if (sourceRegion == null) { return null; } // -- clone it to avoid unexpected modifications return (Rectangle)sourceRegion.clone(); } /** * Sets the source subsampling. The sourceXSubsampling and * sourceYSubsampling parameters specify the number of rows and columns to * advance after every source pixel. * * @param sourceXSubsampling * the source X subsampling. * @param sourceYSubsampling * the source Y subsampling. * @param subsamplingXOffset * the subsampling X offset. * @param subsamplingYOffset * the subsampling Y offset. */ public void setSourceSubsampling(int sourceXSubsampling, int sourceYSubsampling, int subsamplingXOffset, int subsamplingYOffset) { if (sourceXSubsampling <= 0) { throw new IllegalArgumentException("sourceXSubsampling <= 0"); } if (sourceYSubsampling <= 0) { throw new IllegalArgumentException("sourceYSubsampling <= 0"); } if (subsamplingXOffset <= 0 || subsamplingXOffset >= sourceXSubsampling) { throw new IllegalArgumentException("subsamplingXOffset is wrong"); } if (subsamplingYOffset <= 0 || subsamplingYOffset >= sourceYSubsampling) { throw new IllegalArgumentException("subsamplingYOffset is wrong"); } // -- does region contain pixels if (sourceRegion != null) { if (sourceRegion.width <= subsamplingXOffset || sourceRegion.height <= subsamplingYOffset) { throw new IllegalArgumentException("there are no pixels in region"); } } this.sourceXSubsampling = sourceXSubsampling; this.sourceYSubsampling = sourceYSubsampling; this.subsamplingXOffset = subsamplingXOffset; this.subsamplingYOffset = subsamplingYOffset; } /** * Gets the source X subsampling - the number of source columns to advance * for each pixel. * * @return the source X subsampling. */ public int getSourceXSubsampling() { return sourceXSubsampling; } /** * Gets the source Y subsampling - the number of source rows to advance for * each pixel. * * @return the source Y subsampling. */ public int getSourceYSubsampling() { return sourceYSubsampling; } /** * Gets the horizontal offset of the subsampling grid. * * @return the horizontal offset of the subsampling grid. */ public int getSubsamplingXOffset() { return subsamplingXOffset; } /** * Gets the vertical offset of the subsampling grid. * * @return the vertical offset of the subsampling grid. */ public int getSubsamplingYOffset() { return subsamplingYOffset; } /** * Sets the indices of the source bands. * * @param sourceBands * the indices of the source bands. */ public void setSourceBands(int[] sourceBands) { // TODO implement throw new UnsupportedOperationException("not implemented yet"); } /** * Gets the array of source bands. * * @return the array of source bands. */ public int[] getSourceBands() { // TODO implement throw new UnsupportedOperationException("not implemented yet"); } /** * Sets the specified ImageTypeSpecifier for the destination image. * * @param destinationType * the ImageTypeSpecifier. */ public void setDestinationType(ImageTypeSpecifier destinationType) { // TODO implement throw new UnsupportedOperationException("not implemented yet"); } /** * Gets the type of the destination image as an ImageTypeSpecifier. . * * @return the ImageTypeSpecifier. */ public ImageTypeSpecifier getDestinationType() { // TODO implement throw new UnsupportedOperationException("not implemented yet"); } /** * Sets the offset in the destination image where the decoded pixels are * placed as a result of reading, or specified an area to be written while * writing operation. * * @param destinationOffset * the destination offset. */ public void setDestinationOffset(Point destinationOffset) { if (destinationOffset == null) { throw new IllegalArgumentException("destinationOffset == null!"); } this.destinationOffset = (Point)destinationOffset.clone(); } /** * Gets the offset in the destination image for placing pixels. * * @return the offset in the destination image. */ public Point getDestinationOffset() { return (Point)destinationOffset.clone(); } /** * Sets the IIOParamController to this IIOParam object for providing * settings to this IIOParam. * * @param controller * the new IIOParamController. */ public void setController(IIOParamController controller) { // TODO implement throw new UnsupportedOperationException("not implemented yet"); } /** * Gets the current IIOParamController controller for this IIOParam. * * @return the current IIOParamController controller for this IIOParam. */ public IIOParamController getController() { // TODO implement throw new UnsupportedOperationException("not implemented yet"); } /** * Gets the default IIOParamController controller for this IIOParam. * * @return the default IIOParamController controller for this IIOParam, or * null. */ public IIOParamController getDefaultController() { // TODO implement throw new UnsupportedOperationException("not implemented yet"); } /** * Returns true if IIOParamController is installed for this IIOParam. * * @return true, if IIOParamController is installed for this IIOParam, false * otherwise. */ public boolean hasController() { // TODO implement throw new UnsupportedOperationException("not implemented yet"); } /** * Activates the controller. * * @return true, if successful, false otherwise. */ public boolean activateController() { // TODO implement throw new UnsupportedOperationException("not implemented yet"); } }