]> git.saurik.com Git - wxWidgets.git/blame - include/wx/gifdecod.h
Added gifdecod.h
[wxWidgets.git] / include / wx / gifdecod.h
CommitLineData
661dc384
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: gifdecod.h
3// Purpose: wxGIFDecoder, GIF reader for wxImage and wxAnimation
4// Author: Guillermo Rodriguez Garcia <guille@iies.es>
5// Version: 3.0
6// Last rev: 1999/08/10
7// Copyright: (c) Guillermo Rodriguez Garcia
8// Licence: wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11#ifndef _WX_GIFDECOD_H
12#define _WX_GIFDECOD_H
13
14#ifdef __GNUG__
15#pragma interface "gifdecod.h"
16#endif
17
18#include "wx/setup.h"
19
20#if wxUSE_STREAMS
21#include "wx/stream.h"
22#include "wx/image.h"
23
24
25typedef struct _IMAGEN
26{
27 unsigned int w; /* width */
28 unsigned int h; /* height */
29 unsigned int left; /* x coord (in logical screen) */
30 unsigned int top; /* y coord (in logical screen) */
31 int transparent; /* transparent color (-1 = none) */
32 int disposal; /* disposal method */
33 long delay; /* delay in ms (-1 = unused) */
34 unsigned char *p; /* bitmap */
35 unsigned char *pal; /* palette */
36 struct _IMAGEN *next; /* next image */
37 struct _IMAGEN *prev; /* prev image */
38} IMAGEN;
39
40
41/* disposal method */
42#define D_UNSPECIFIED -1 /* not specified */
43#define D_DONOTDISPOSE 0 /* do not dispose */
44#define D_TOBACKGROUND 1 /* restore to background colour */
45#define D_TOPREVIOUS 2 /* restore to previous image */
46
47/* error codes */
48#define E_OK 0 /* everything was OK */
49#define E_ARCHIVO -1 /* error opening file */
50#define E_FORMATO -2 /* error in gif header */
51#define E_MEMORIA -3 /* error allocating memory */
52
53
54class wxGIFDecoder
55{
56private:
57 /* logical screen */
58 unsigned int m_screenw; /* logical screen width */
59 unsigned int m_screenh; /* logical screen height */
60 int m_background; /* background color (-1 = none) */
61
62 /* image data */
63 bool m_anim; /* animated GIF */
64 int m_nimages; /* number of images */
65 int m_image; /* current image */
66 IMAGEN *m_pimage; /* pointer to current image */
67 IMAGEN *m_pfirst; /* pointer to first image */
68 IMAGEN *m_plast; /* pointer to last image */
69
70 /* decoder state vars */
71 int m_restbits; /* remaining valid bits */
72 unsigned int m_restbyte; /* remaining bytes in this block */
73 unsigned int m_lastbyte; /* last byte read */
74
75 wxInputStream *m_f; /* input file */
76
77private:
78 int getcode(int bits, int abfin);
79 int dgif(IMAGEN *img, int interl, int bits);
80
81public:
82 // constructor, destructor, etc.
83 wxGIFDecoder(wxInputStream *s, bool anim = FALSE);
84 ~wxGIFDecoder();
85 int ReadGIF();
86 void Destroy();
87
88 // convert current frame to wxImage
89 bool ConvertToImage(wxImage *image) const;
90
91 // get data of current frame
92 int GetFrameIndex() const;
93 unsigned char* GetData() const;
94 unsigned char* GetPalette() const;
95 unsigned int GetWidth() const;
96 unsigned int GetHeight() const;
97 unsigned int GetLeft() const;
98 unsigned int GetTop() const;
99 int GetDisposalMethod() const;
100 int GetTransparentColour() const;
101 long GetDelay() const;
102
103 // get global data
104 unsigned int GetLogicalScreenWidth() const;
105 unsigned int GetLogicalScreenHeight() const;
106 int GetBackgroundColour() const;
107 int GetNumberOfFrames() const;
108 bool IsAnimation() const;
109
110 // move through the animation
111 bool GoFirstFrame();
112 bool GoLastFrame();
113 bool GoNextFrame(bool cyclic = FALSE);
114 bool GoPrevFrame(bool cyclic = FALSE);
115 bool GoFrame(int which);
116};
117
118
119#endif // wxUSE_STREAM
120#endif // _WX_GIFDECOD_H
121