#ifndef _IMAGE_H_
#define _IMAGE_H_

class File;

#include "typedefs.h"

class Image
{
public:
  Image ();
  virtual ~Image ();

  bool FileSave (File& file, LC_IMAGE_OPTS* opts) const;
  bool FileSave (const char* filename, LC_IMAGE_OPTS* opts) const;
  bool FileLoad (File& file);
  bool FileLoad (const char* filename);

  void Resize (int width, int height);
  void ResizePow2 ();
  void FromOpenGL (int width, int height);
  void Allocate (int width, int height, bool alpha);

  int Width () const
    { return m_nWidth; }
  int Height () const
    { return m_nHeight; }
  int Alpha () const
    { return m_bAlpha; }
  unsigned char* GetData () const
    { return m_pData; }

protected:
  void FreeData ();

  bool LoadJPG (File& file);
  bool LoadBMP (File& file);
  bool LoadPNG (File& file);
  bool LoadGIF (File& file);

  bool SaveJPG (File& file, int quality, bool progressive) const;
  bool SaveBMP (File& file, bool quantize) const;
  bool SavePNG (File& file, bool transparent, bool interlaced, unsigned char* background) const;
  bool SaveGIF (File& file, bool transparent, bool interlaced, unsigned char* background) const;

  int m_nWidth;
  int m_nHeight;
  bool m_bAlpha;
  unsigned char* m_pData;
};

void SaveVideo(char* filename, Image *images, int count, float fps);

#endif // _IMAGE_H_
