
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_awt_image_LookupOp__
#define __java_awt_image_LookupOp__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class RenderingHints;
      namespace geom
      {
          class Point2D;
          class Rectangle2D;
      }
      namespace image
      {
          class BufferedImage;
          class ColorModel;
          class LookupOp;
          class LookupTable;
          class Raster;
          class WritableRaster;
      }
    }
  }
}

class java::awt::image::LookupOp : public ::java::lang::Object
{

public:
  LookupOp(::java::awt::image::LookupTable *, ::java::awt::RenderingHints *);
  virtual ::java::awt::image::BufferedImage * filter(::java::awt::image::BufferedImage *, ::java::awt::image::BufferedImage *);
  virtual ::java::awt::geom::Rectangle2D * getBounds2D(::java::awt::image::BufferedImage *);
  virtual ::java::awt::image::BufferedImage * createCompatibleDestImage(::java::awt::image::BufferedImage *, ::java::awt::image::ColorModel *);
  virtual ::java::awt::geom::Point2D * getPoint2D(::java::awt::geom::Point2D *, ::java::awt::geom::Point2D *);
  virtual ::java::awt::image::LookupTable * getTable();
  virtual ::java::awt::RenderingHints * getRenderingHints();
  virtual ::java::awt::image::WritableRaster * filter(::java::awt::image::Raster *, ::java::awt::image::WritableRaster *);
  virtual ::java::awt::geom::Rectangle2D * getBounds2D(::java::awt::image::Raster *);
  virtual ::java::awt::image::WritableRaster * createCompatibleDestRaster(::java::awt::image::Raster *);
private:
  ::java::awt::image::LookupTable * __attribute__((aligned(__alignof__( ::java::lang::Object)))) lut;
  ::java::awt::RenderingHints * hints;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_image_LookupOp__
