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

#ifndef __javax_imageio_IIOImage__
#define __javax_imageio_IIOImage__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace image
      {
          class BufferedImage;
          class Raster;
          class RenderedImage;
      }
    }
  }
  namespace javax
  {
    namespace imageio
    {
        class IIOImage;
      namespace metadata
      {
          class IIOMetadata;
      }
    }
  }
}

class javax::imageio::IIOImage : public ::java::lang::Object
{

public:
  IIOImage(::java::awt::image::Raster *, ::java::util::List *, ::javax::imageio::metadata::IIOMetadata *);
  IIOImage(::java::awt::image::RenderedImage *, ::java::util::List *, ::javax::imageio::metadata::IIOMetadata *);
  virtual ::javax::imageio::metadata::IIOMetadata * getMetadata();
  virtual jint getNumThumbnails();
  virtual ::java::awt::image::Raster * getRaster();
  virtual ::java::awt::image::RenderedImage * getRenderedImage();
  virtual ::java::awt::image::BufferedImage * getThumbnail(jint);
  virtual ::java::util::List * getThumbnails();
  virtual jboolean hasRaster();
  virtual void setMetadata(::javax::imageio::metadata::IIOMetadata *);
  virtual void setRaster(::java::awt::image::Raster *);
  virtual void setRenderedImage(::java::awt::image::RenderedImage *);
  virtual void setThumbnails(::java::util::List *);
public: // actually protected
  ::java::awt::image::RenderedImage * __attribute__((aligned(__alignof__( ::java::lang::Object)))) image;
  ::javax::imageio::metadata::IIOMetadata * metadata;
  ::java::awt::image::Raster * raster;
  ::java::util::List * thumbnails;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_imageio_IIOImage__
