| /* |
| * 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. |
| */ |
| 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"); |
| } |
| } |