package org.neuroph.imgrec.filter;

import java.awt.image.BufferedImage;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Process images by applying all filters in chain 
 * @author Sanja
 */
public class ImageFilterChain implements ImageFilter, Serializable {

    private List filters = new ArrayList<>();
    private String chainName;
    /**
     * Add filter to chain
     * @param filter filter to be added
     */
    public void addFilter(ImageFilter filter){
        filters.add(filter);
    }
    /**
     * Remove filter from chain
     * @param filter filter to be removed
     * @return true if filter is removed 
     */
    public boolean removeFilter(ImageFilter filter){
        return filters.remove(filter);
    }

    /**
     * Apply all filters from a chain on image 
     * @param image image to process
     * @return processed image
     */
    @Override
    public BufferedImage processImage(BufferedImage image) {
        
        BufferedImage tempImage = image;
        for (ImageFilter filter : filters) {
            BufferedImage filteredImage = filter.processImage(tempImage);
            tempImage = filteredImage;
        }

        return tempImage;

    }
    /**
     * Returns images of all stages in processing
     * Used for testing 
     * @param image
     * @return 
     */
    public List processImageTest(BufferedImage image){
        List list = new ArrayList();
        BufferedImage tempImage = image;
        for (ImageFilter filter : filters) {
            BufferedImage processedImage = filter.processImage(tempImage);
            String filterName = filter.toString();
            FilteredImage filteredImage = new FilteredImage(processedImage,filterName);
            list.add(filteredImage);
            tempImage = processedImage;
        }

        return list;
    }
    /**
     * Get filters from chain
     * @return 
     */
    public List getFilters(){
        return filters;
    }

    public void setFilters(List filters) {
        this.filters = filters;
    }

    public String getChainName() {
        return chainName;
    }

    public void setChainName(String chainName) {
        this.chainName = chainName;
    }

    @Override
    public String toString() {
        return chainName;
    }
    
}

 

Ads help maintain this website.