/* JWildfire - an image and animation processor written in Java Copyright (C) 1995-2011 Andreas Maschke This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This software 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this software; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jwildfire.transform; import org.jwildfire.base.Property; import org.jwildfire.base.PropertyMin; import org.jwildfire.image.SimpleImage; import org.jwildfire.image.WFImage; public class CropTransformer extends Mesh2DTransformer { @Property(description = "Left edge of the cropped region") @PropertyMin(0) private int left = 0; @Property(description = "Top edge of the cropped region") @PropertyMin(0) private int top = 0; @Property(description = "Width of the cropped region") private int width = 200; @Property(description = "Height of the cropped region") private int height = 200; @Override protected void performPixelTransformation(WFImage pImg) { SimpleImage img = (SimpleImage) pImg; int imgWidth = pImg.getImageWidth(); int imgHeight = pImg.getImageHeight(); int left = this.left; if (left < 0) left = 0; else if (left > imgWidth - 1) left = imgWidth - 1; int top = this.top; if (top < 0) top = 0; else if (top > imgHeight - 1) top = imgHeight - 1; int width = this.width; if (width < 1) width = 1; else if (left + width > imgWidth) width = imgWidth - left; int height = this.height; if (height < 1) height = 1; else if (top + height > imgHeight) height = imgHeight - top; if ((width == imgWidth) && (height == imgHeight)) return; img.resetImage(width, height); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { img.setARGB(j, i, srcImg.getARGBValue(j + left, i + top)); } } } @Override public void initDefaultParams(WFImage pImg) { int width = pImg.getImageWidth(); int height = pImg.getImageHeight(); this.left = width / 7; this.top = height / 7; this.width = width - 2 * this.left; this.height = height - 2 * this.height; } public int getLeft() { return left; } public void setLeft(int left) { this.left = left; } public int getTop() { return top; } public void setTop(int top) { this.top = top; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } }