/* Network-Integrated Multimedia Middleware (NMM)
 * http://www.motama.com/nmm.html
 *
 * Copyright (C) 2006-2007
 * Motama GmbH, Saarbruecken, Germany
 * http://www.motama.com
 *
 * This file is part of NMM. 
 * 
 * NMM is free software; you can redistribute it and/or modify it    
 * under the terms of the GNU General Public License as published by 
 * the Free Software Foundation; only version 2 of the License.      
 * 
 * NMM 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 General Public 
 * License for more details.  
 * 
 * You should have received a copy of the GNU General Public License 
 * along with NMM; if not, write to the Free Software Foundation,    
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 */

module NMM {
  interface IMagickManipulationNode {

    void setBorderColor(in nmm_double r, in nmm_double g, in nmm_double b);

    void clearManipulators();

    void adaptiveThreshold(in nmm_uint32 width,
			      in nmm_uint32 height,
			      in nmm_uint32 offset = 0);

    
    void addNoise(in string noise_type);

    void annotate(in string text,
		     in string bounding_area,
		     in string gravity,
		     in nmm_double degrees);

    void blur(in nmm_double radius = 1, in nmm_double sigma = 0.5);

    void border(in string geometry = "6x6+0+0");

    void channel(in string layer);

    void charcoal(in nmm_double radius = 1, in nmm_double sigma = 0.5);

    void chop(in string geometry);

    void colorize(in nmm_uint32 opacity_red,
		     in nmm_uint32 opacity_green,
		     in nmm_uint32 opacity_blue,
		     in nmm_double pen_color_r,
		     in nmm_double pen_color_g,
		     in nmm_double pen_color_b);

    void comment(in string comment);

    void contrast(in nmm_uint32 sharpen);

    void crop(in string geometry);

    void cycleColormap(in nmm_int32 amount);

    void despeckle();

    void edge(in nmm_uint32 radius = 0.0);

    void emboss(in nmm_double radius = 1, in nmm_double sigma = 0.5);

    void enhance();

    void equalize();

    void erase();

    void flip();

    void floodFillColor(in nmm_uint32 x, in nmm_uint32 y,
			in nmm_double fill_color_r,
			in nmm_double fill_color_g,
			in nmm_double fill_color_b);

    void floodFillOpacity(in nmm_int64 x, in nmm_int64 y,
			  in nmm_uint32 opacity,
			  in string method);

    void flop();

    void frame(in nmm_uint32 width, in nmm_uint32 height,
	       in nmm_int32 x, in nmm_int32 y,
	       in nmm_int32 inner_bevel = 0, in nmm_int32 outer_bevel = 0);

    void gamma(in nmm_double gamma_red, in nmm_double gamma_green, in nmm_double gamma_blue);

    void gaussianBlur(in nmm_double width, in nmm_double sigma);

    void implode(in nmm_double factor);

    void label(in string name);

    void magnify();

    void matteFloodfill(in nmm_double target_r, in nmm_double target_g, in nmm_double target_b,
			in nmm_uint32 opacity,
			in nmm_int32 x, in nmm_int32 y,
			in string method);

    void medianFilter(in nmm_double radius = 0.0);

    void minify();

    void modulate(in nmm_double brightness, in nmm_double saturation, in nmm_double hue);

    void negate();

    void normalize();

    void oilPaint(in nmm_uint32 radius = 3);

    void opacity(in nmm_uint32 opacity);

    void opaque(in nmm_double opaque_color_r,
		in nmm_double opaque_color_g,
		in nmm_double opaque_color_b,
		in nmm_double pen_color_r,
		in nmm_double pen_color_g,
		in nmm_double pen_color_b);

    void quantize(in nmm_bool measureError = false);

    void raise(in string geometry, in nmm_bool raisedFlag = false);

    void reduceNoise(in nmm_uint32 order);

    void roll(in nmm_int32 columns, in nmm_int32 rows);

    void rotate(in nmm_double degrees);

    void sample(in string geometry);

    void scale(in string geometry);

    void segment(in nmm_double cluster_threshold = 1.0,
		 in nmm_double smoothing_threshold = 1.5);

    void shade(in nmm_double azimuth = 30, in nmm_double elevation = 30,
	       in nmm_bool color_shading = false);

    void sharpen(in nmm_double radius = 1, in nmm_double sigma = 0.5);

    void shave(in string geometry);

    void shear(in nmm_double x_shear_angle, in nmm_double y_shear_angle);

    void solarize(in nmm_double factor = 50.0);

    void spread(in nmm_uint32 amount = 3);

    void swirl(in nmm_double degrees);

    void threshold(in nmm_double threshold);

    void transform(in string image_geometry, in string crop_geometry);

    void transparent(in nmm_double color_r, in nmm_double color_g, in nmm_double color_b);

    void trim();

    void unsharpmask(in nmm_double radius, in nmm_double sigma,
		     in nmm_double amount, in nmm_double threshold);

    void wave(in nmm_double amplitude = 25.0, in nmm_double wavelength = 150.0);

    void zoom(in string geometry);
  };
}
