]>
git.saurik.com Git - wxWidgets.git/blob - include/wx/gifdecod.h
f61739ed7ece92b05d7683c0f00289a8a74cbec9
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxGIFDecoder, GIF reader for wxImage and wxAnimation
4 // Author: Guillermo Rodriguez Garcia <guille@iies.es>
7 // Copyright: (c) 1999 Guillermo Rodriguez Garcia
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_GIFDECOD_H
12 #define _WX_GIFDECOD_H
14 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
15 #pragma interface "gifdecod.h"
20 #if wxUSE_STREAMS && wxUSE_GIF
22 #include "wx/stream.h"
26 // --------------------------------------------------------------------------
28 // --------------------------------------------------------------------------
31 // Note that the error code wxGIF_TRUNCATED means that the image itself
32 // is most probably OK, but the decoder didn't reach the end of the data
33 // stream; this means that if it was not reading directly from file,
34 // the stream will not be correctly positioned. the
38 wxGIF_OK
= 0, /* everything was OK */
39 wxGIF_INVFORMAT
, /* error in gif header */
40 wxGIF_MEMERR
, /* error allocating memory */
41 wxGIF_TRUNCATED
/* file appears to be truncated */
45 // Experimental; subject to change.
49 wxGIF_D_UNSPECIFIED
= -1, /* not specified */
50 wxGIF_D_DONOTDISPOSE
= 0, /* do not dispose */
51 wxGIF_D_TOBACKGROUND
= 1, /* restore to background colour */
52 wxGIF_D_TOPREVIOUS
= 2 /* restore to previous image */
56 #define MAX_BLOCK_SIZE 256 /* max. block size */
59 // --------------------------------------------------------------------------
61 // --------------------------------------------------------------------------
63 // internal class for storing GIF image data
70 unsigned int w
; /* width */
71 unsigned int h
; /* height */
72 unsigned int left
; /* x coord (in logical screen) */
73 unsigned int top
; /* y coord (in logical screen) */
74 int transparent
; /* transparent color (-1 = none) */
75 int disposal
; /* disposal method (-1 = unspecified) */
76 long delay
; /* delay in ms (-1 = unused) */
77 unsigned char *p
; /* bitmap */
78 unsigned char *pal
; /* palette */
79 GIFImage
*next
; /* next image */
80 GIFImage
*prev
; /* prev image */
82 DECLARE_NO_COPY_CLASS(GIFImage
)
86 class WXDLLEXPORT wxGIFDecoder
90 unsigned int m_screenw
; /* logical screen width */
91 unsigned int m_screenh
; /* logical screen height */
92 int m_background
; /* background color (-1 = none) */
95 bool m_anim
; /* animated GIF */
96 int m_nimages
; /* number of images */
97 int m_image
; /* current image */
98 GIFImage
*m_pimage
; /* pointer to current image */
99 GIFImage
*m_pfirst
; /* pointer to first image */
100 GIFImage
*m_plast
; /* pointer to last image */
102 // decoder state vars
103 int m_restbits
; /* remaining valid bits */
104 unsigned int m_restbyte
; /* remaining bytes in this block */
105 unsigned int m_lastbyte
; /* last byte read */
106 unsigned char m_buffer
[MAX_BLOCK_SIZE
]; /* buffer for reading */
107 unsigned char *m_bufp
; /* pointer to next byte in buffer */
110 wxInputStream
*m_f
; /* input stream */
113 int getcode(int bits
, int abfin
);
114 int dgif(GIFImage
*img
, int interl
, int bits
);
117 // get data of current frame
118 int GetFrameIndex() const;
119 unsigned char* GetData() const;
120 unsigned char* GetPalette() const;
121 unsigned int GetWidth() const;
122 unsigned int GetHeight() const;
123 unsigned int GetLeft() const;
124 unsigned int GetTop() const;
125 int GetDisposalMethod() const;
126 int GetTransparentColour() const;
127 long GetDelay() const;
130 unsigned int GetLogicalScreenWidth() const;
131 unsigned int GetLogicalScreenHeight() const;
132 int GetBackgroundColour() const;
133 int GetNumberOfFrames() const;
134 bool IsAnimation() const;
136 // move through the animation
139 bool GoNextFrame(bool cyclic
= false);
140 bool GoPrevFrame(bool cyclic
= false);
141 bool GoFrame(int which
);
144 // constructor, destructor, etc.
145 wxGIFDecoder(wxInputStream
*s
, bool anim
= false);
151 // convert current frame to wxImage
152 bool ConvertToImage(wxImage
*image
) const;
154 DECLARE_NO_COPY_CLASS(wxGIFDecoder
)
158 #endif // wxUSE_STREAM && wxUSE_GIF
159 #endif // _WX_GIFDECOD_H