/*
JWildfire - an image and animation processor written in Java
Copyright (C) 1995-2017 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.create.tina.render.filter;
import java.util.ArrayList;
import java.util.List;
public enum FilterKernelType {
BELL {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return BellFilterKernel.class;
}
@Override
public boolean isSharpening() {
return false;
}
@Override
public boolean isAdaptive() {
return false;
}
},
BLACKMAN {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return BlackmanFilterKernel.class;
}
@Override
public boolean isSharpening() {
return true;
}
@Override
public boolean isAdaptive() {
return false;
}
},
BOX {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return BoxFilterKernel.class;
}
@Override
public boolean isSharpening() {
return false;
}
@Override
public boolean isAdaptive() {
return false;
}
},
BSPLINE {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return BSplineFilterKernel.class;
}
@Override
public boolean isSharpening() {
return false;
}
@Override
public boolean isAdaptive() {
return false;
}
},
CATROM {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return CatRomFilterKernel.class;
}
@Override
public boolean isSharpening() {
return true;
}
@Override
public boolean isAdaptive() {
return false;
}
},
GAUSSIAN {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return GaussianFilterKernel.class;
}
@Override
public boolean isSharpening() {
return false;
}
@Override
public boolean isAdaptive() {
return false;
}
},
HAMMING {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return HammingFilterKernel.class;
}
@Override
public boolean isSharpening() {
return true;
}
@Override
public boolean isAdaptive() {
return false;
}
},
HANNING {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return HanningFilterKernel.class;
}
@Override
public boolean isSharpening() {
return true;
}
@Override
public boolean isAdaptive() {
return false;
}
},
HERMITE {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return HermiteFilterKernel.class;
}
@Override
public boolean isSharpening() {
return false;
}
@Override
public boolean isAdaptive() {
return false;
}
},
LANCZOS2 {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return Lanczos2FilterKernel.class;
}
@Override
public boolean isSharpening() {
return true;
}
@Override
public boolean isAdaptive() {
return false;
}
},
LANCZOS3 {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return Lanczos3FilterKernel.class;
}
@Override
public boolean isSharpening() {
return true;
}
@Override
public boolean isAdaptive() {
return false;
}
},
MITCHELL {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return MitchellFilterKernel.class;
}
@Override
public boolean isSharpening() {
return true;
}
@Override
public boolean isAdaptive() {
return false;
}
},
MITCHELL_SMOOTH {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return MitchellSmoothFilterKernel.class;
}
@Override
public boolean isSharpening() {
return true;
}
@Override
public boolean isAdaptive() {
return false;
}
},
QUADRATIC {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return QuadraticFilterKernel.class;
}
@Override
public boolean isSharpening() {
return false;
}
@Override
public boolean isAdaptive() {
return false;
}
},
SINEPOW5 {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return SinePow5FilterKernel.class;
}
@Override
public boolean isSharpening() {
return false;
}
@Override
public boolean isAdaptive() {
return false;
}
},
SINEPOW10 {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return SinePow10FilterKernel.class;
}
@Override
public boolean isSharpening() {
return false;
}
@Override
public boolean isAdaptive() {
return false;
}
},
SINEPOW15 {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return SinePow15FilterKernel.class;
}
@Override
public boolean isSharpening() {
return false;
}
@Override
public boolean isAdaptive() {
return false;
}
},
TRIANGLE {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return TriangleFilterKernel.class;
}
@Override
public boolean isSharpening() {
return false;
}
@Override
public boolean isAdaptive() {
return false;
}
},
MITCHELL_SINEPOW {
@Override
public Class<? extends FilterKernel> getPrimaryFilterClass() {
return MitchellSmoothFilterKernel.class;
}
@Override
public boolean isSharpening() {
return true;
}
@Override
public boolean isAdaptive() {
return true;
}
@Override
public FilterKernelType getSmoothingKernelType() {
return FilterKernelType.SINEPOW10;
}
@Override
public FilterKernelType getLowDensityKernelType() {
return FilterKernelType.SINEPOW10;
}
},
;
public abstract Class<? extends FilterKernel> getPrimaryFilterClass();
public abstract boolean isSharpening();
public abstract boolean isAdaptive();
public FilterKernelType getSmoothingKernelType() {
return null;
}
public FilterKernelType getLowDensityKernelType() {
return null;
}
public static List<FilterKernelType> getSharpeningFilters() {
List<FilterKernelType> res = new ArrayList<>();
for (FilterKernelType kernel : values()) {
if (!kernel.isAdaptive() && kernel.isSharpening()) {
res.add(kernel);
}
}
return res;
}
public static List<FilterKernelType> getSmoothingFilters() {
List<FilterKernelType> res = new ArrayList<>();
for (FilterKernelType kernel : values()) {
if (!kernel.isAdaptive() && !kernel.isSharpening()) {
res.add(kernel);
}
}
return res;
}
public static List<FilterKernelType> getAdapativeFilters() {
List<FilterKernelType> res = new ArrayList<>();
for (FilterKernelType kernel : values()) {
if (kernel.isAdaptive()) {
res.add(kernel);
}
}
return res;
}
public FilterKernel createFilterInstance() {
try {
return getPrimaryFilterClass().newInstance();
}
catch (InstantiationException e) {
throw new RuntimeException(e);
}
catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}