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

#ifndef __gnu_java_awt_image_ImageConverter__
#define __gnu_java_awt_image_ImageConverter__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace image
        {
            class AsyncImage;
            class ImageConverter;
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Image;
      namespace image
      {
          class BufferedImage;
          class ColorModel;
          class IndexColorModel;
      }
    }
  }
}

class gnu::java::awt::image::ImageConverter : public ::java::lang::Object
{

public:
  ImageConverter();
  virtual void setDimensions(jint, jint);
  virtual void setProperties(::java::util::Hashtable *);
  virtual void setColorModel(::java::awt::image::ColorModel *);
  virtual void setHints(jint);
  virtual void setPixels(jint, jint, jint, jint, ::java::awt::image::ColorModel *, JArray< jbyte > *, jint, jint);
  virtual void setPixels(jint, jint, jint, jint, ::java::awt::image::ColorModel *, JArray< jint > *, jint, jint);
private:
  ::java::awt::image::ColorModel * setupColorModel(::java::awt::image::ColorModel *);
  void createImage();
  jint transferPixels(jint, jint, jint, jint, ::java::awt::image::ColorModel *, JArray< jbyte > *, jint, jint, jint);
  jint transferPixels(jint, jint, jint, jint, ::java::awt::image::ColorModel *, JArray< jint > *, jint, jint, jint);
  jint convertPixels(jint, jint, jint, jint, ::java::awt::image::ColorModel *, JArray< jbyte > *, jint, jint, jint);
  jint convertPixels(jint, jint, jint, jint, ::java::awt::image::ColorModel *, JArray< jint > *, jint, jint, jint);
  jint convertIndexColorModelToSRGB(jint, jint, jint, jint, ::java::awt::image::IndexColorModel *, JArray< jbyte > *, jint, jint, jint);
  jint convertIndexColorModelToSRGB(jint, jint, jint, jint, ::java::awt::image::IndexColorModel *, JArray< jint > *, jint, jint, jint);
  jint updateTransparency(jint, jint);
public:
  virtual void imageComplete(jint);
  virtual void setTargetColorModel(::java::awt::image::ColorModel *);
  virtual ::java::awt::Image * getImage();
  static ::java::lang::String * IMAGE_TRANSPARENCY_PROPERTY;
  static ::java::lang::String * IMAGE_PROPERTIES_PROPERTY;
private:
  ::gnu::java::awt::image::AsyncImage * __attribute__((aligned(__alignof__( ::java::lang::Object)))) image;
  ::java::awt::image::BufferedImage * bImage;
  ::java::util::Hashtable * imageProperties;
  jint width;
  jint height;
  ::java::awt::image::ColorModel * colorModel;
  ::java::awt::image::ColorModel * targetColorModel;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_image_ImageConverter__
