001 /* 002 * 003 004 Licensed under the Apache License, Version 2.0 (the "License"); 005 you may not use this file except in compliance with the License. 006 You may obtain a copy of the License at 007 008 http://www.apache.org/licenses/LICENSE-2.0 009 010 Unless required by applicable law or agreed to in writing, software 011 distributed under the License is distributed on an "AS IS" BASIS, 012 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 See the License for the specific language governing permissions and 014 limitations under the License. 015 */ 016 017 package railo.runtime.img.filter;import java.awt.image.BufferedImage; 018 019 import railo.runtime.engine.ThreadLocalPageContext; 020 import railo.runtime.exp.FunctionException; 021 import railo.runtime.exp.PageException; 022 import railo.runtime.img.ImageUtil; 023 import railo.runtime.type.KeyImpl; 024 import railo.runtime.type.Struct; 025 import railo.runtime.type.util.CollectionUtil; 026 027 028 029 /** 030 * A filter which changes the gain and bias of an image - similar to ContrastFilter. 031 */ 032 public class GainFilter extends TransferFilter implements DynFiltering { 033 034 private float gain = 0.5f; 035 private float bias = 0.5f; 036 037 protected float transferFunction( float f ) { 038 f = ImageMath.gain(f, gain); 039 f = ImageMath.bias(f, bias); 040 return f; 041 } 042 043 /** 044 * Set the gain. 045 * @param gain the gain 046 * @min-value: 0 047 * @max-value: 1 048 * @see #getGain 049 */ 050 public void setGain(float gain) { 051 this.gain = gain; 052 initialized = false; 053 } 054 055 /** 056 * Get the gain. 057 * @return the gain 058 * @see #setGain 059 */ 060 public float getGain() { 061 return gain; 062 } 063 064 /** 065 * Set the bias. 066 * @param bias the bias 067 * @min-value: 0 068 * @max-value: 1 069 * @see #getBias 070 */ 071 public void setBias(float bias) { 072 this.bias = bias; 073 initialized = false; 074 } 075 076 /** 077 * Get the bias. 078 * @return the bias 079 * @see #setBias 080 */ 081 public float getBias() { 082 return bias; 083 } 084 085 public String toString() { 086 return "Colors/Gain..."; 087 } 088 089 public BufferedImage filter(BufferedImage src, Struct parameters) throws PageException {BufferedImage dst=ImageUtil.createBufferedImage(src); 090 Object o; 091 if((o=parameters.removeEL(KeyImpl.init("Gain")))!=null)setGain(ImageFilterUtil.toFloatValue(o,"Gain")); 092 if((o=parameters.removeEL(KeyImpl.init("Bias")))!=null)setBias(ImageFilterUtil.toFloatValue(o,"Bias")); 093 if((o=parameters.removeEL(KeyImpl.init("Dimensions")))!=null){ 094 int[] dim=ImageFilterUtil.toDimensions(o,"Dimensions"); 095 setDimensions(dim[0],dim[1]); 096 } 097 098 // check for arguments not supported 099 if(parameters.size()>0) { 100 throw new FunctionException(ThreadLocalPageContext.get(), "ImageFilter", 3, "parameters", "the parameter"+(parameters.size()>1?"s":"")+" ["+CollectionUtil.getKeyList(parameters,", ")+"] "+(parameters.size()>1?"are":"is")+" not allowed, only the following parameters are supported [Gain, Bias, Dimensions]"); 101 } 102 103 return filter(src, dst); 104 } 105 } 106