package org.openstreetmap.josm.plugins.rasterfilters.filters;
import java.awt.image.BufferedImage;
import java.rmi.server.UID;
import javax.json.JsonObject;
/**
* The Filter interface is inherited by all filters which are implemented.
* <p>
* This interface has four methods that should be overrided in
* <p>
* implementation.
*
* @author Nipel-Crumple
*/
public interface Filter {
/**
* This method should take external fields values of filter's parameters
* which should be described in the meta-information. In other words, if you have 3
* controls of type 'linear_slider' and if state at least one of these
* controls has changed, you will get new filter state in the form of
* json object 'filterState', then parse it and
* store given parameters' values in class.
*
* @param filterState json that has information about current filter state
* @return json object 'filterState'
*/
JsonObject changeFilterState(JsonObject filterState);
/**
* This method processes given image and returns
* updated version of the image. Algorithm and implementation of
* this method depends on your needs and wishes.
*
* @param img image to process
* @return processed image
*/
BufferedImage applyFilter(BufferedImage img);
/**
* Every filter must have his own unique ID number.
* In case of rasterfilters plugin it ID is the type of UID.
*
* @param id sets value of ID field
*/
void setId(UID id);
/**
* Getter for filter's ID field.
*
* @return id of filter
*/
UID getId();
}