git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3640 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			122 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        gifdecod.h
 | 
						|
// Purpose:     wxGIFDecoder, GIF reader for wxImage and wxAnimation
 | 
						|
// Author:      Guillermo Rodriguez Garcia <guille@iies.es>
 | 
						|
// Version:     3.02
 | 
						|
// CVS-ID:      $Id$
 | 
						|
// Copyright:   (c) 1999 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 && wxUSE_GIF
 | 
						|
 | 
						|
#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 (-1 = unspecified) */
 | 
						|
    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_FORMATO       1           /* error in gif header */
 | 
						|
#define E_MEMORIA       2           /* error allocating memory */
 | 
						|
 | 
						|
class WXDLLEXPORT 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();
 | 
						|
    bool CanRead();
 | 
						|
    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 && wxUSE_GIF
 | 
						|
#endif  // _WX_GIFDECOD_H
 | 
						|
 |