📄 gifdeclib.h
字号:
#ifndef _GIF_DEC_
#define _GIF_DEC_
#include "nucleus.h"
#include "showbmp.h"
#include "lib721.h"
#include "mydef.h"
#define LCD_ADDRESS 0x30000000
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
extern int globalTest;
typedef struct tagSIZE
{
long cx;
long cy;
} SIZE;
typedef struct tagRECT
{
long left;
long top;
long width;
long height;
} RECT;
// turn byte alignment on !!
enum GIFBlockTypes
{
BLOCK_UNKNOWN,
BLOCK_APPEXT,
BLOCK_COMMEXT,
BLOCK_CONTROLEXT,
BLOCK_PLAINTEXT,
BLOCK_IMAGE,
BLOCK_TRAILER
};
enum ControlExtValues // graphic control extension packed field values
{
GCX_PACKED_DISPOSAL, // disposal method
GCX_PACKED_USERINPUT,
GCX_PACKED_TRANSPCOLOR
};
enum LSDPackedValues // logical screen descriptor packed field values
{
LSD_PACKED_GLOBALCT,
LSD_PACKED_CRESOLUTION,
LSD_PACKED_SORT,
LSD_PACKED_GLOBALCTSIZE
};
enum IDPackedValues // image descriptor packed field values
{
ID_PACKED_LOCALCT,
ID_PACKED_INTERLACE,
ID_PACKED_SORT,
ID_PACKED_LOCALCTSIZE
};
typedef __packed struct tGIFHeader // GIF header
{
char m_cSignature[3]; // Signature - Identifies the GIF Data Stream, This field contains the fixed value 'GIF'
char m_cVersion[3]; // Version number. May be one of the following:
// "87a" or "89a"
}TGIFHeader;
typedef __packed struct tGIFLSDescriptor // Logical Screen Descriptor
{
WORD m_wWidth; // 2 bytes. Logical screen width
WORD m_wHeight; // 2 bytes. Logical screen height
unsigned char m_cPacked; // packed field
unsigned char m_cBkIndex; // 1 byte. Background color index
unsigned char m_cPixelAspect; // 1 byte. Pixel aspect ratio
// inline int GetPackedValue(enum LSDPackedValues Value);
} TGIFLSDescriptor;
typedef __packed struct tGIFAppExtension // application extension block
{
unsigned char m_cExtIntroducer; // extension introducer (0x21)
unsigned char m_cExtLabel; // app. extension label (0xFF)
unsigned char m_cBlockSize; // fixed value of 11
char m_cAppIdentifier[8]; // application identifier
char m_cAppAuth[3]; // application authentication code
// char m_commentData[256];
}TGIFAppExtension;
typedef __packed struct tGIFControlExt // graphic control extension block
{
unsigned char m_cExtIntroducer; // extension introducer (0x21)
unsigned char m_cControlLabel; // control extension label (0xF9)
unsigned char m_cBlockSize; // fixed value of 4
unsigned char m_cPacked; // packed field
WORD m_wDelayTime; // delay time
unsigned char m_cTColorIndex; // transparent color index
unsigned char m_cBlockTerm; // block terminator (0x00)
// inline int GetPackedValue(enum ControlExtValues Value);
}TGIFControlExt;
typedef __packed struct tGIFCommentExt // comment extension block
{
unsigned char m_cExtIntroducer; // extension introducer (0x21)
unsigned char m_cCommentLabel; // comment extension label (0xFE)
// U8 m_commentData[256];
}TGIFCommentExt;
typedef __packed struct tGIFPlainTextExt // plain text extension block
{
unsigned char m_cExtIntroducer; // extension introducer (0x21)
unsigned char m_cPlainTextLabel; // text extension label (0x01)
unsigned char m_cBlockSize; // fixed value of 12
WORD m_wLeftPos; // text grid left position
WORD m_wTopPos; // text grid top position
WORD m_wGridWidth; // text grid width
WORD m_wGridHeight; // text grid height
unsigned char m_cCellWidth; // character cell width
unsigned char m_cCellHeight; // character cell height
unsigned char m_cFgColor; // text foreground color index
unsigned char m_cBkColor; // text background color index
// U8 m_plainTData[256];
}TGIFPlainTextExt;
typedef __packed struct tPackedInImgDes
{
unsigned m_LCTSize;
unsigned m_Reserved;
unsigned m_SortFlag;
unsigned m_InterlaceFlag;
unsigned m_LCTFlag;
} TPackedInImgDes;
typedef __packed struct tGIFImageDescriptor // image descriptor block
{
unsigned char m_cImageSeparator; // image separator byte (0x2C)
WORD m_wLeftPos; // image left position
WORD m_wTopPos; // image top position
WORD m_wWidth; // image width
WORD m_wHeight; // image height
unsigned char m_cPacked; // packed field
// TPackedInImgDes m_sPackFields;
}TGIFImageDescriptor;
// turn byte alignment off !!
typedef struct // structure that keeps a single frame info
{
U8 *m_pRGB; // pointer to the interface used for drawing,here is container for RGB,by yajun
SIZE m_frameSize;
SIZE m_frameOffset;
UINT m_nDelay; // delay (in 1/100s of a second)
UINT m_nDisposal; // disposal method
// by yajun
U8 m_LZWMinCodeSize;
U8 m_nBlockSize;
U32 m_LCTPos;
TGIFPlainTextExt m_plainTextExt;
TGIFImageDescriptor m_imageDescriptor;
TGIFCommentExt m_commentExt;
TGIFControlExt m_controlExt;
TGIFAppExtension m_appExtension;
// put them out of the original containers to keep the 8 byte alignment,,by yajun
TPackedInImgDes m_ImaDesExt_sPackFields;
U8 m_AppExt_commentData[256];
U8 m_ComExt_commentData[256];
U8 m_PlnTexExt_plainTData[256];
// added by yajun 04-03-30
unsigned m_TransparentFlag;
}TFrame;
typedef unsigned char BYTE;
typedef DWORD COLORREF;
typedef void *HGLOBAL;
typedef void *LPVOID;
typedef struct
{
U8 * m_pRawData;
UINT m_nDataSize;
UINT m_nCurrOffset;
BOOL m_bIsGIF;
BOOL m_bIsPlaying;
volatile BOOL m_bExitThread;
BOOL m_bIsInitialized;
RECT m_PaintRect;
int m_clrBackIndex;
COLORREF m_clrBackground;
UINT m_nGlobalCTSize;
U32 m_nGlobalCTPos; // by yajun
U8 * m_pPicture;
SIZE m_PictureSize;
TFrame *m_arrFrames;
UINT m_nFrameCount;
UINT m_nCurrFrame;
TGIFHeader *m_pGIFHeader;
TGIFLSDescriptor *m_pGIFLSDescriptor;
BYTE m_clrBackInex;
TFrame m_Frame;
}TImage;
////////////////////////////////////////////////////////////////////////////////
// functions prototypes
extern BOOL GIFDec( U8 *inFileBuf,
U32 fileSize,
U32 LeftX,
U32 TopY,
U32 nWidth,
U32 nHeight,
U32 Times);
extern BOOL InitImage(TImage *pImage);
extern BOOL Large_PlayFrame(TImage *pImage,
int nCurFrame,
int LeftX,
int TopY,
int nWidth,
int nHeight);
extern int GetPackedValueCon(TGIFControlExt *pCon,
enum ControlExtValues Value);
extern int GetPackedValueLSD(TGIFLSDescriptor *pLSD,
enum LSDPackedValues Value);
extern int GetPackedValueImD(TGIFImageDescriptor *pImd,
enum IDPackedValues Value);
extern void ResetDataPointer(TImage *pImage);
extern BOOL SkipNextGraphicBlock(TImage *pImage);
extern UINT GetSubBlocksLen( TImage *pImage,
UINT nStartingOffset);
extern BOOL SkipNextBlock(TImage *pImage);
extern int GetNextBlockLen(TImage *pImage);
extern enum GIFBlockTypes GetNextBlock(TImage *pImage);
extern BOOL GetNextGraphicBlock( TImage *pImage,
TFrame *pFrame,
UINT *pBlockLen,
UINT *pDelay,
SIZE *pBlockSize,
SIZE *pBlockOffset,
UINT *pDisposal,
int nLCDWidht,
int nHeight);
extern BOOL Large_GetNextGraphicBlock(TImage *pImage,
int nWidth,
int nHeight);
extern BOOL IsGIF(TImage *pImage) ;
extern BOOL IsAnimatedGIF(TImage *pImage) ;
extern BOOL IsPlaying(TImage *pImage);
extern int GetFrameCount(TImage *pImage);
extern BOOL FrameDec( TImage *pImage,
U8 *pSData,
int nStart,
int nBlockLen,
TFrame *pFrame,
int nWidth,
int nHeight);
extern U16 GetNewCode( TFrame *pFrame,
U8 *pSData,
U8 cCurCodeSize,
U8 *pcCurByte,
int *step,
U16 *pBitPos,
U16 *pByteCountInBlock);
extern void GetRGB( TImage *pImage,
TFrame *pFrame,
U8 *pSData,
U8 index,
U8 * pR,
U8 *pG,
U8 *pB);
extern BOOL WriteToFrame( TFrame *pFrame,
int WritePos,
U8 R,
U8 G,
U8 B);
extern BOOL InterLaceWriteToFrame( TFrame *pFrame,
int WritePos,
U8 R,
U8 G,
U8 B);
extern BOOL Large_SubDrawFrameRGB(TImage *pImage,
int curFrame,
int ClockWise,
int deltaH,int deltaW,
int LeftX,
int TopY,
int nWidth,
int nHeight);
extern BOOL Large_DrawFrameRGB(TImage *pImage,
int curFrame,
int LeftX,
int TopY,
int nWidth,
int nHeight);
extern BOOL Large_GIFFrameAdjust(TImage *pImage,
int curFrame,
int nWidth,
int nHeight,
BOOL *pisResized);
extern void DestroyImage(TImage *pImage);
extern BYTE * MakeDwordAlignedBuf( BYTE *dataBuf,
UINT widthPix,
UINT height,
UINT *uiOutWidthBytes);
extern void Large_RestoreBckgrnd(TImage *pImage,
int curFrame,
int clockWise,
RECT *plastR,
RECT *pcurR,
int LeftX,
int TopY,
int nWidth,
int nHeight);
extern void WriteRect(int left,
int top,
int width,
int height,
BYTE R,
BYTE G,
BYTE B);
extern void PutPixel(U32 curX,
U32 curY,
U8 R,
U8 G,
U8 B);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -