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

#ifndef __javax_imageio_ImageReadParam__
#define __javax_imageio_ImageReadParam__

#pragma interface

#include <javax/imageio/IIOParam.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Dimension;
      namespace image
      {
          class BufferedImage;
      }
    }
  }
  namespace javax
  {
    namespace imageio
    {
        class ImageReadParam;
    }
  }
}

class javax::imageio::ImageReadParam : public ::javax::imageio::IIOParam
{

public:
  ImageReadParam();
  virtual jboolean canSetSourceRenderSize();
  virtual ::java::awt::image::BufferedImage * getDestination();
  virtual JArray< jint > * getDestinationBands();
  virtual jint getSourceMaxProgressivePass();
  virtual jint getSourceMinProgressivePass();
  virtual jint getSourceNumProgressivePasses();
  virtual ::java::awt::Dimension * getSourceRenderSize();
  virtual void setDestination(::java::awt::image::BufferedImage *);
  virtual void setDestinationBands(JArray< jint > *);
  virtual void setSourceProgressivePasses(jint, jint);
  virtual void setSourceRenderSize(::java::awt::Dimension *);
public: // actually protected
  jboolean __attribute__((aligned(__alignof__( ::javax::imageio::IIOParam)))) canSetSourceRenderSize__;
  ::java::awt::image::BufferedImage * destination;
  JArray< jint > * destinationBands;
  jint minProgressivePass;
  jint numProgressivePasses;
  ::java::awt::Dimension * sourceRenderSize;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_imageio_ImageReadParam__
