/* * HaoRan ImageFilter Classes v0.3 * Copyright (C) 2012 Zhenjun Dai * * This library 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 library 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 library; if not, write to the Free Software Foundation. */ package com.marshalchen.common.uimodule.ImageFilter.Distort; import com.marshalchen.common.uimodule.ImageFilter.IImageFilter; public class WaveFilter extends BilinearDistort{ double _phase; double _amplitude ; double _waveLength ; public WaveFilter(int wavelength, int amplitude){ this(wavelength, amplitude, 0); } public WaveFilter(int wavelength, int amplitude, double phase) { _waveLength = 2 * ((wavelength >= 1) ? wavelength : 1) ; _amplitude = ((amplitude >= 1) ? amplitude : 1) ; _phase = phase ; } public double[] calc_undistorted_coord (int x, int y, double un_x, double un_y) { double width = clone.getWidth(); double height = clone.getHeight() ; double fScaleX = 1.0; double fScaleY = 1.0 ; if (width < height) fScaleX = height / width ; else if (width > height) fScaleY = width / height ; // distances to center, scaled double cen_x = width / 2.0; double cen_y = height / 2.0; double dx = (x - cen_x) * fScaleX; double dy = (y - cen_y) * fScaleY; double amnt = _amplitude * Math.sin (2 * LIB_PI * Math.sqrt (dx*dx + dy*dy) / _waveLength + _phase) ; un_x = (amnt + dx) / fScaleX + cen_x ; un_y = (amnt + dy) / fScaleY + cen_y ; un_x = Function.FClampDouble (un_x, 0.0, width-1.0) ; un_y = Function.FClampDouble (un_y, 0.0, height-1.0) ; return new double[]{un_x, un_y}; } }