From: Julian Smart Date: Wed, 18 Aug 1999 06:28:59 +0000 (+0000) Subject: Added gifdecod.h X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/661dc384df649f673d06fa1038e343cf263932af Added gifdecod.h git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3408 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/gifdecod.h b/include/wx/gifdecod.h new file mode 100644 index 0000000000..30fa11cfed --- /dev/null +++ b/include/wx/gifdecod.h @@ -0,0 +1,121 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: gifdecod.h +// Purpose: wxGIFDecoder, GIF reader for wxImage and wxAnimation +// Author: Guillermo Rodriguez Garcia +// Version: 3.0 +// Last rev: 1999/08/10 +// Copyright: (c) Guillermo Rodriguez Garcia +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GIFDECOD_H +#define _WX_GIFDECOD_H + +#ifdef __GNUG__ +#pragma interface "gifdecod.h" +#endif + +#include "wx/setup.h" + +#if wxUSE_STREAMS +#include "wx/stream.h" +#include "wx/image.h" + + +typedef struct _IMAGEN +{ + unsigned int w; /* width */ + unsigned int h; /* height */ + unsigned int left; /* x coord (in logical screen) */ + unsigned int top; /* y coord (in logical screen) */ + int transparent; /* transparent color (-1 = none) */ + int disposal; /* disposal method */ + long delay; /* delay in ms (-1 = unused) */ + unsigned char *p; /* bitmap */ + unsigned char *pal; /* palette */ + struct _IMAGEN *next; /* next image */ + struct _IMAGEN *prev; /* prev image */ +} IMAGEN; + + +/* disposal method */ +#define D_UNSPECIFIED -1 /* not specified */ +#define D_DONOTDISPOSE 0 /* do not dispose */ +#define D_TOBACKGROUND 1 /* restore to background colour */ +#define D_TOPREVIOUS 2 /* restore to previous image */ + +/* error codes */ +#define E_OK 0 /* everything was OK */ +#define E_ARCHIVO -1 /* error opening file */ +#define E_FORMATO -2 /* error in gif header */ +#define E_MEMORIA -3 /* error allocating memory */ + + +class wxGIFDecoder +{ +private: + /* logical screen */ + unsigned int m_screenw; /* logical screen width */ + unsigned int m_screenh; /* logical screen height */ + int m_background; /* background color (-1 = none) */ + + /* image data */ + bool m_anim; /* animated GIF */ + int m_nimages; /* number of images */ + int m_image; /* current image */ + IMAGEN *m_pimage; /* pointer to current image */ + IMAGEN *m_pfirst; /* pointer to first image */ + IMAGEN *m_plast; /* pointer to last image */ + + /* decoder state vars */ + int m_restbits; /* remaining valid bits */ + unsigned int m_restbyte; /* remaining bytes in this block */ + unsigned int m_lastbyte; /* last byte read */ + + wxInputStream *m_f; /* input file */ + +private: + int getcode(int bits, int abfin); + int dgif(IMAGEN *img, int interl, int bits); + +public: + // constructor, destructor, etc. + wxGIFDecoder(wxInputStream *s, bool anim = FALSE); + ~wxGIFDecoder(); + int ReadGIF(); + void Destroy(); + + // convert current frame to wxImage + bool ConvertToImage(wxImage *image) const; + + // get data of current frame + int GetFrameIndex() const; + unsigned char* GetData() const; + unsigned char* GetPalette() const; + unsigned int GetWidth() const; + unsigned int GetHeight() const; + unsigned int GetLeft() const; + unsigned int GetTop() const; + int GetDisposalMethod() const; + int GetTransparentColour() const; + long GetDelay() const; + + // get global data + unsigned int GetLogicalScreenWidth() const; + unsigned int GetLogicalScreenHeight() const; + int GetBackgroundColour() const; + int GetNumberOfFrames() const; + bool IsAnimation() const; + + // move through the animation + bool GoFirstFrame(); + bool GoLastFrame(); + bool GoNextFrame(bool cyclic = FALSE); + bool GoPrevFrame(bool cyclic = FALSE); + bool GoFrame(int which); +}; + + +#endif // wxUSE_STREAM +#endif // _WX_GIFDECOD_H +