Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cImageGIF.h
Go to the documentation of this file.
1 //
5 
6 #ifndef _INC_cImageGIF_H
7 #define _INC_cImageGIF_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "cImageBase.h"
13 #include "cImageBMP.h"
14 #include "../WinAPI/cWinResource.h"
17 
18 namespace GrayLib
19 {
21 
22 #pragma pack(push, 1)
23  struct CATTR_PACKED cImageGIFHeader // size = 6+7=13
24  {
27  BYTE m_GIF[3];
28  BYTE m_ID[3];
29  WORD m_wWidth;
30  WORD m_wHeight;
31  BYTE m_bFlag;
33  BYTE m_bZero;
34  };
36  {
39  WORD m_leftOffset;
43  BYTE m_bFlag;
44  };
46  {
49  static const BYTE k_Code = 0xF9;
50 
51  BYTE m_bTranspColorFlag : 1;
52  BYTE m_bUserInputFlag : 1;
53  BYTE m_nDisplosalMethod : 3;
54  BYTE m_nResN : 3;
55  WORD m_wDelayTime;
57  };
58 #pragma pack(pop)
59 
61  {
64 
65  public:
66  int m_iLoopCur;
68 
72 
73  public:
74  cImageGIFParams() noexcept
75  : m_iLoopCur(0) // How many loops so far.
76  , m_iLoopCount(0) // -1 = loop forever.
77  {
78  cMem::Zero(&m_gce, sizeof(m_gce));
79  }
80  };
81 
83  : public cImageBMP
84  , public cSurfaceFrames
85  {
91 
92  typedef cImageBMP SUPER_t;
93  private:
94  cImageGIFParams m_Params;
95  cHeapBlock m_Data;
96  private:
97  HRESULT LoadFrameCur();
98 
99  public:
100  cImageGIF() noexcept;
101  virtual ~cImageGIF();
102 
103  virtual HRESULT SetFrameCurrent(int iFrameNum) override;
104  TIMESYSD_t get_TimeToNextFrame() const; // In MSec
105  HRESULT SelectFrameFirst(bool bCountLoops);
106  HRESULT SelectFrameNext();
107 
108  virtual void SetEmpty() override;
109  virtual HRESULT ReadStream(cStreamInput& strIn) override;
110  virtual HRESULT WriteStream(cStreamOutput* pFile) const override; // E_NOTIMPL
111 
113  };
114 
116  : public IImageCreator
117  , public cSingleton<cImageGIFType>
118  {
121  public:
122  cImageGIFType() noexcept
123  : cSingleton<cImageGIFType>(this, typeid(cImageGIFType))
124  {
125  }
126  virtual bool IsFileExt(const FILECHAR_t* pszFileExt) const noexcept
127  {
128  return cFilePath::IsFileNameExt(pszFileExt, _FN(".gif"));
129  }
130  virtual cImageBasePtr CreateObject() const override
131  {
132  return new cImageGIF;
133  }
134  };
135 };
136 #endif // _INC_cImageGIF_H
#define _FN(x)
like _T(x) macro for static text file names.
Definition: FileName.h:23
#define CATTR_PACKED
Definition: GrayCore.h:87
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cImageBMP.h:25
Definition: cImageGIF.h:61
int m_iLoopCur
How many loops played so far.
Definition: cImageGIF.h:66
cImageGIFFrameHeader m_Frame
The current frame. // Per frame.
Definition: cImageGIF.h:71
cImageGIFControlExt m_gce
transparency, time delay, etc.
Definition: cImageGIF.h:70
cImageGIFParams() noexcept
Definition: cImageGIF.h:74
int m_iLoopCount
-1 = play loop forever.
Definition: cImageGIF.h:67
cImageGIFHeader m_Head
Info about the full GIF.
Definition: cImageGIF.h:69
Definition: cImageGIF.h:118
virtual cImageBasePtr CreateObject() const override
Definition: cImageGIF.h:130
virtual bool IsFileExt(const FILECHAR_t *pszFileExt) const noexcept
Definition: cImageGIF.h:126
cImageGIFType() noexcept
Definition: cImageGIF.h:122
Definition: cImageGIF.h:85
UNITTEST2_PREDEF(cImageGIF)
Definition: cSurfaceBase.h:26
Definition: cSurfaceBase.h:366
static bool __stdcall IsFileNameExt(const FILECHAR_t *pszFileName, const FILECHAR_t *pszExt) noexcept
Definition: cFilePath.cpp:1006
Definition: cHeap.h:156
Definition: cRefPtr.h:225
Definition: cSingleton.h:127
Definition: cStream.h:306
Definition: cStream.h:126
Definition: cImageBase.h:66
Definition: cMesh.h:22
UNITTEST2_PREDEF(cQuadtree)
INT32 TIMESYSD_t
Time delta. signed milli-Seconds Span. cTimeSys::k_DMAX, cTimeSys::k_INF = MAILSLOT_WAIT_FOREVER.
Definition: cTimeSys.h:28
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
Definition: cImageGIF.h:46
BYTE m_nResN
Definition: cImageGIF.h:54
BYTE m_bUserInputFlag
Definition: cImageGIF.h:52
WORD m_wDelayTime
1/100ths of sec. (default=0) // How long until next frame in (1/100ths of sec), 0xFFFF=forever.
Definition: cImageGIF.h:55
BYTE m_bTranspColorFlag
Transparency color used ? (default=false)
Definition: cImageGIF.h:51
BYTE m_nDisplosalMethod
disposal method
Definition: cImageGIF.h:53
BYTE m_bTranspColorIndex
This is the transparency color.
Definition: cImageGIF.h:56
Definition: cImageGIF.h:36
WORD m_leftOffset
offset to update inside the frame.
Definition: cImageGIF.h:39
BYTE m_bFlag
skip 2nd GIF flag, 0x40 = interlaced.
Definition: cImageGIF.h:43
WORD m_topOffset
Definition: cImageGIF.h:40
WORD m_wWidthFrame
For this frame. must use with m_topOffset,m_leftOffset of course.
Definition: cImageGIF.h:41
WORD m_wHeightFrame
For this frame.
Definition: cImageGIF.h:42
Definition: cImageGIF.h:24
WORD m_wWidth
pixels
Definition: cImageGIF.h:29
BYTE m_bZero
float aspect_ratio = (float)((q[6] + 15) / 64.0);
Definition: cImageGIF.h:33
BYTE m_bBackgroundColor
background color
Definition: cImageGIF.h:32
WORD m_wHeight
pixels
Definition: cImageGIF.h:30
BYTE m_bFlag
0x80 = color table used.
Definition: cImageGIF.h:31
static void Zero(void *pData, size_t nSizeBlock) noexcept
Definition: cMem.h:100