GifFileTypeAndDecode
所属分类:图形图像处理
开发工具:C/C++
文件大小:79KB
下载次数:3
上传日期:2009-05-12 07:37:06
上 传 者:
hanx_t
说明: 里面有GIF图像文件的格式说明,并附有GIF的解码代码
(There are GIF image file formats GIF decoder with a code)
文件列表:
Gif文件格式说明和解码器\file_gif.htm (70507, 2003-02-22)
Gif文件格式说明和解码器\GIF解码器\gif89a.cpp (13510, 2000-10-23)
Gif文件格式说明和解码器\GIF解码器\gif89a.doc (288256, 2000-10-10)
Gif文件格式说明和解码器\GIF解码器\gif89a.h (1676, 2000-10-17)
Gif文件格式说明和解码器\GIF解码器\gifinfo.cpp (1883, 2000-10-18)
Gif文件格式说明和解码器\GIF解码器\gifinfo.exe (53248, 2000-10-23)
Gif文件格式说明和解码器\GIF解码器\lzw.doc (43520, 2000-10-13)
Gif文件格式说明和解码器\GIF解码器 (0, 2009-05-12)
Gif文件格式说明和解码器 (0, 2009-05-12)
GIF文件解码器类使用说明
本解码器类支持GIF文件格式的89a版本,可支持动画GIF文件!
本原代码未经严格测试,欢迎广大朋友批评指正。
1.使用授权
本原代码文档包括下列文件:
gif89a.cpp 解码器类原程序
gif89a.h 解码器类头文件
gif89a.doc GIF文件格式说明
lzw.doc GIF文件所用压缩算法的说明
readme.txt 自述文件
gifinfo.exe 使用本原代码的例子程序
gifinfo.cpp 例子程序原文件
如果您要在各种媒体刊载、引用本文档,请不要对本文档内容进行任何修改。如果您在自己的编程中
引用本文档内容,可对引用内容进行修改。在您引用本文档时如能注明出处,并通过下面方式通知本人一
下,本人将非常高兴!
联系方式:
e-mail:cproom@163.net
http://cproom.yeah.net
通讯地址:陕西省西安市太白南路202号(骊山微电子公司)陈鹏(收)
邮编 :710065
电话 :(029)-8234582
2.GIF文件解码器类参考
请参考GIF文件格式说明文件gif89a.doc
(1)结构类型说明:
typedef struct //GIF文件的全局参数
{ UINT frames; //文件中图象帧数
WORD scrWidth,scrHeight; //逻辑屏幕的宽度和高度(单位像素)
BOOL gFlag; //是否有全局调色板(决定其他调色板参数是否有效)
UINT colorRes; //色彩分辨率(不使用)
BOOL gSort; //全局调色板是否按优先排序
UINT gSize; //全局调色板大小(有多少个实际入口)
UINT BKColorIdx; //背景色的调色板索引
UINT pixelAspectRatio; //像素长宽比例
BYTE *gColorTable; //指向全局调色板的指针(256个入口,每个入口三字节)
//调色板格式请参看gif89a.doc
}GLOBAL_INFO;
typedef struct //一帧图象的参数
{ WORD imageLPos; //图象左边沿到逻辑屏幕的距离(单位像素)
WORD imageTPos; //图象上边沿到逻辑屏幕的距离(单位像素)
WORD imageWidth; //图象的宽度(单位像素)
WORD imageHeight; //图象的高度(单位像素)
BOOL lFlag; //是否有局部调色板(决定其他调色板参数是否有效)
BOOL interlaceFlag; //图象数据是否交错
BOOL sortFlag; //局部调色板数据是否按优先排序
UINT lSize; //局部调色板大小(有多少个实际入口)
BYTE *pColorTable; //指向局部调色板的指针(256个入口,每个入口三字节)
//调色板格式请参看gif89a.doc
BYTE *dataBuf; //图象数据指针
GCTRLEXT ctrlExt; //图象扩展参数(与透明背景和动画有关)
}FRAME;
typedef struct //图象扩展参数
{ BOOL active; //本结构中的其它参数是否可用
UINT disposalMethod; //处理方法(见gif89a.doc,可忽略)
BOOL userInputFlag; //是否期待用户输入
BOOL trsFlag; //是否有透明色
WORD delayTime; //延时时间(单位1/100秒)
UINT trsColorIndex; //透明色调色板索引
}GCTRLEXT;
(2)公有数据成员
无!
(3)私有数据成员
ifstream ifs; //用于读文件的文件流
char version[4]; //版本字符串
BOOL error; //类实例变量创建时是否出错的标志
BOOL opened; //是否处于打开状态
BOOL inMem; //图象数据是否一次读入内存
BYTE gColorTable[256*3]; //全局调色板
BYTE lColorTable[256*3]; //局部调色板(inMem为假时用)
streampos dataStart; //保存文件流中图象数据开始的地方
FRAME *allFrames; //指向所有图象帧的指针(inMem为真时用)
UINT curIndex; //当前帧的索引(inMem为真时用)
GLOBAL_INFO gInfo; //GIF文件的全局参数
FRAME curFrame; //当前帧的参数(inMem为假时用)
GCTRLEXT ctrlExt; //图象扩展参数(读入数据时临时使用)
(4)私有成员函数
UINT CGif89a::checkFrames(ifstream& ifs)
功能 :检查文件中图象帧数。
参数 :ifs:对文件流的引用。
返回值:文件中图象帧数。
BOOL CGif89a::getAllFrames(ifstream& ifs)
功能 :将所有图象帧数据读入内存。
参数 :ifs:对文件流的引用。
返回值:操作是否成功,为真成功,为假失败。
BOOL CGif89a::extractData(FRAME* f,ifstream& ifs)
功能 :解压缩一帧图象数据。
参数 :f:指向用于保存图象数据的结构。
ifs:对文件流的引用。
返回值:操作是否成功,为真成功,为假失败。
BOOL CGif89a::initStrTable(STRING_TABLE_ENTRY* strTable,UINT rootSize)
功能 :初始化字符串表。
参数 :strTable:指向字符串表的指针。
rootSize:初始化的入口数。
返回值:操作是否成功,为真成功,为假失败。
BOOL CGif89a::addStrTable(STRING_TABLE_ENTRY* strTable,UINT addIdx,UINT idx,unsigned char c)
功能 :在字符串表中增加一项。
参数 :strTable:指向字符串表的指针。
addIdx:增加的入口索引。
idx:用于构造要增加的字符串的入口索引。
c:用于构造要增加的字符串的字符。
返回值:操作是否成功,为真成功,为假失败。
(5)公有成员函数
CGif89a::CGif89a()
功 能:构造函数
参 数:无
返回值:无
说 明:用于构造一个空的实例,以便以后用open()函数打开文件。
CGif89a::CGif89a(LPCSTR fileName,BOOL inMem)
功 能:构造函数
参 数:fileName:要打开的文件名字符串
inMem:是否将图象数据一次读入内存
返回值:无
说 明:内部调用open()函数,请参考open()函数。
CGif89a::~CGif89a()
功 能:析构函数
参 数:无
返回值:无
说 明:内部调用close()函数进行清理工作。
BOOL CGif89a::operator!()
功 能:判断构造是否成功
参 数:无
返回值:为真则构造成功,为假则失败。
说 明:在构造函数调用之后,一定要调用此函数确定构造是否成功。
BOOL CGif89a::open(LPCSTR fileName,BOOL inMem)
功 能:打开文件
参 数:fileName:要打开的文件名字符串
inMem:是否将图象数据一次读入内存
返回值:为真则成功,为假则失败
说 明:如果inMem为真,则将所有图象帧数据一次全部读入内存,然后关闭文件。此方式
用于文件较小,需要读取数据较快的情况。此方式占用内存较多。
如果inMem为假,则保持文件为打开状态,以后需要时由文件读入数据。此方式用
于文件较大,对读取数据不要求很快的情况。此方式占用内存较少。
使用其它函数前,应首先调用此函数。
本函数对GIF文件完整性要求较为严格,对于从Internet上下载的GIF文件,如果未
能完整下载,则打开将失败。
void CGif89a::close()
功 能:将状态有打开切换到关闭,以便打开新的文件
参 数:无
返回值:无
说 明:关闭文件(inMem为假时),释放内存,可以再次用open()打开新的文件。
LPCSTR CGif89a::getVer()
功 能:读取版本字符串
参 数:无
返回值:指向版本字符串的指针
说 明:无
LPCFRAME CGif89a::getNextFrame()
功 能:取得一帧图象
参 数:无
返回值:指向FRAME结构的指针,保存了图象数据,及参数,成功时返回非0值,失败时返回NULL。
说 明:每次调用返回一帧新的数据,图象数据是已经解压的。当读取最后一帧数据后,再
次调用此函数,返回第一帧的数据,如此循环。使用返回的数据时要注意各种参数,
特别是数据是否交错。
如果图象帧数大于1,循环调用此函数可得到动画GIF文件中的所有图象帧数据。
一定要检查返回值是否有效!
LPCGLOBAL_INFO CGif89a::getGlobalInfo()
功 能:取得全局参数
参 数:无
返回值:指向GLOBAL_INFO结构的指针,保存了GIF文件的全局参数。
说 明:无
3.gifinfo.exe使用说明
功能:显示GIF文件全局参数和每一帧图象的参数
用法:gifinfo GIF文件名
说明:输出文字中有汉字,请在DOS窗口运行。如果文件中有多帧图象,显示内容可能看不全,可
用下面格式将输出保存到文件,再打开文件观看。
gifinfo GIF文件名 > tp.txt
“全文完”
近期下载者:
相关文件:
收藏者: