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

#ifndef __javax_imageio_plugins_jpeg_JPEGImageWriteParam__
#define __javax_imageio_plugins_jpeg_JPEGImageWriteParam__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace imageio
    {
      namespace plugins
      {
        namespace jpeg
        {
            class JPEGHuffmanTable;
            class JPEGImageWriteParam;
            class JPEGQTable;
        }
      }
    }
  }
}

class javax::imageio::plugins::jpeg::JPEGImageWriteParam : public ::javax::imageio::ImageWriteParam
{

public:
  JPEGImageWriteParam(::java::util::Locale *);
  virtual void unsetCompression();
  virtual jboolean isCompressionLossless();
  virtual JArray< ::java::lang::String * > * getCompressionQualityDescriptions();
  virtual JArray< jfloat > * getCompressionQualityValues();
  virtual jboolean areTablesSet();
  virtual void setEncodeTables(JArray< ::javax::imageio::plugins::jpeg::JPEGQTable * > *, JArray< ::javax::imageio::plugins::jpeg::JPEGHuffmanTable * > *, JArray< ::javax::imageio::plugins::jpeg::JPEGHuffmanTable * > *);
  virtual void unsetEncodeTables();
  virtual JArray< ::javax::imageio::plugins::jpeg::JPEGQTable * > * getQTables();
  virtual JArray< ::javax::imageio::plugins::jpeg::JPEGHuffmanTable * > * getDCHuffmanTables();
  virtual JArray< ::javax::imageio::plugins::jpeg::JPEGHuffmanTable * > * getACHuffmanTables();
  virtual void setOptimizeHuffmanTables(jboolean);
  virtual jboolean getOptimizeHuffmanTables();
private:
  JArray< ::javax::imageio::plugins::jpeg::JPEGQTable * > * __attribute__((aligned(__alignof__( ::javax::imageio::ImageWriteParam)))) qTables;
  JArray< ::javax::imageio::plugins::jpeg::JPEGHuffmanTable * > * DCHuffmanTables;
  JArray< ::javax::imageio::plugins::jpeg::JPEGHuffmanTable * > * ACHuffmanTables;
  jboolean optimize;
  JArray< ::java::lang::String * > * compressionQualityDescriptions;
  JArray< jfloat > * compressionQualityValues;
  ::java::util::ResourceBundle * messages;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_imageio_plugins_jpeg_JPEGImageWriteParam__
