001 package railo.runtime.functions.image; 002 003 import java.awt.image.Kernel; 004 005 import railo.runtime.PageContext; 006 import railo.runtime.exp.FunctionException; 007 import railo.runtime.exp.PageException; 008 import railo.runtime.op.Caster; 009 import railo.runtime.op.Decision; 010 011 public class ImageFilterKernel { 012 public static Object call(PageContext pc, double width, double height, Object oData) throws PageException { 013 014 float[] data=null; 015 if(oData instanceof float[]) 016 data=(float[]) oData; 017 else if(Decision.isNativeArray(oData)) { 018 data=toFloatArray(pc,oData); 019 } 020 else if(Decision.isArray(oData)) { 021 data=toFloatArray(pc,Caster.toNativeArray(oData)); 022 } 023 else 024 throw new FunctionException(pc, "", 3, "data", "cannot cast data to a float array"); 025 026 return new Kernel(Caster.toIntValue(width),Caster.toIntValue(height),data); 027 } 028 029 private static float[] toFloatArray(PageContext pc,Object oData) throws PageException { 030 float[] data=null; 031 // Object[] 032 if(oData instanceof Object[]) { 033 Object[] arr = ((Object[])oData); 034 data=new float[arr.length]; 035 for(int i=0;i<arr.length;i++){ 036 data[i]=Caster.toFloatValue(arr[i]); 037 } 038 } 039 // boolean[] 040 else if(oData instanceof boolean[]) { 041 boolean[] arr = ((boolean[])oData); 042 data=new float[arr.length]; 043 for(int i=0;i<arr.length;i++){ 044 data[i]=Caster.toFloatValue(arr[i]); 045 } 046 } 047 // byte[] 048 else if(oData instanceof byte[]) { 049 byte[] arr = ((byte[])oData); 050 data=new float[arr.length]; 051 for(int i=0;i<arr.length;i++){ 052 data[i]=Caster.toFloatValue(arr[i]); 053 } 054 } 055 // short[] 056 else if(oData instanceof short[]) { 057 short[] arr = ((short[])oData); 058 data=new float[arr.length]; 059 for(int i=0;i<arr.length;i++){ 060 data[i]=Caster.toFloatValue(arr[i]); 061 } 062 } 063 // long[] 064 else if(oData instanceof long[]) { 065 long[] arr = ((long[])oData); 066 data=new float[arr.length]; 067 for(int i=0;i<arr.length;i++){ 068 data[i]=Caster.toFloatValue(arr[i]); 069 } 070 } 071 // int[] 072 else if(oData instanceof int[]) { 073 int[] arr = ((int[])oData); 074 data=new float[arr.length]; 075 for(int i=0;i<arr.length;i++){ 076 data[i]=Caster.toFloatValue(arr[i]); 077 } 078 } 079 // double[] 080 else if(oData instanceof double[]) { 081 double[] arr = ((double[])oData); 082 data=new float[arr.length]; 083 for(int i=0;i<arr.length;i++){ 084 data[i]=Caster.toFloatValue(arr[i]); 085 } 086 } 087 else 088 throw new FunctionException(pc, "", 3, "data", "cannot cast data to a float array"); 089 090 return data; 091 } 092 }