package railo.runtime.functions.image; import java.awt.image.Kernel; import railo.runtime.PageContext; import railo.runtime.exp.FunctionException; import railo.runtime.exp.PageException; import railo.runtime.op.Caster; import railo.runtime.op.Decision; public class ImageFilterKernel { public static Object call(PageContext pc, double width, double height, Object oData) throws PageException { float[] data=null; if(oData instanceof float[]) data=(float[]) oData; else if(Decision.isNativeArray(oData)) { data=toFloatArray(pc,oData); } else if(Decision.isArray(oData)) { data=toFloatArray(pc,Caster.toNativeArray(oData)); } else throw new FunctionException(pc, "", 3, "data", "cannot cast data to a float array"); return new Kernel(Caster.toIntValue(width),Caster.toIntValue(height),data); } private static float[] toFloatArray(PageContext pc,Object oData) throws PageException { float[] data=null; // Object[] if(oData instanceof Object[]) { Object[] arr = ((Object[])oData); data=new float[arr.length]; for(int i=0;i<arr.length;i++){ data[i]=Caster.toFloatValue(arr[i]); } } // boolean[] else if(oData instanceof boolean[]) { boolean[] arr = ((boolean[])oData); data=new float[arr.length]; for(int i=0;i<arr.length;i++){ data[i]=Caster.toFloatValue(arr[i]); } } // byte[] else if(oData instanceof byte[]) { byte[] arr = ((byte[])oData); data=new float[arr.length]; for(int i=0;i<arr.length;i++){ data[i]=Caster.toFloatValue(arr[i]); } } // short[] else if(oData instanceof short[]) { short[] arr = ((short[])oData); data=new float[arr.length]; for(int i=0;i<arr.length;i++){ data[i]=Caster.toFloatValue(arr[i]); } } // long[] else if(oData instanceof long[]) { long[] arr = ((long[])oData); data=new float[arr.length]; for(int i=0;i<arr.length;i++){ data[i]=Caster.toFloatValue(arr[i]); } } // int[] else if(oData instanceof int[]) { int[] arr = ((int[])oData); data=new float[arr.length]; for(int i=0;i<arr.length;i++){ data[i]=Caster.toFloatValue(arr[i]); } } // double[] else if(oData instanceof double[]) { double[] arr = ((double[])oData); data=new float[arr.length]; for(int i=0;i<arr.length;i++){ data[i]=Caster.toFloatValue(arr[i]); } } else throw new FunctionException(pc, "", 3, "data", "cannot cast data to a float array"); return data; } }