求GIF格式图片解析显示的C语言源码

作者&投稿:伯宽 (若有异议请与网页底部的电邮联系)
怎么用C语言读取gif图片内容文件~

用二进制文件方法打开。
(1)读gif_id,输出gif_id, 6 bytes
(2)读logical_screen_descriptor(结构),并输出
(3)如果 ScrHd.flag_GC_table == 1,
则有全局色表,则读全局色表,并输出
(4)循环,
检查gif块的类型,按块的类型读块,并输出
若:
case: 0x2c -- 它是,Image Descriptor(结构),读块并输出
判断有无色表,有则读块并输出,
下面 1 byte 表示 lZW min Code Size,读并输出
子块 (include size, bytes*size data) 读块并输出
子块 (include size, bytes*size data) 读块并输出
可能有很多子块,读块并输出
直到 0x00 读块并输出,
break;
若case: 0x21 0xf9 -- 控制块,读到 0x00, 并输出
break;
若case: 0x21 0xFe -- 注解块,读到 0x00,并输出
break;
若case: 0x21 0x01 -- 普通文本块,读到 0x00,并输出
break;
若case: 0x21 0xff -- 应用程序块,读到 0x00,并输出
break;
若case: 0x3B -- END 第一个图片完毕的标识,并输出
break;
default: 打印“文件错误”break;
(5)关闭文件。

你找一下libgd(GD Graphics Library),一个开源的C图形处理库。
自己下载研究一下吧。源码里有例子参考。网上也有资料。

我去,设计可以随便改啊。是不是想做走马灯那样的效果啊,如果是,去把设计师宰了吧,太差了,用图片+js就可以实现。

// File name : l2_gl_gif.h
#ifndef _GIF_H
#define _GIF_H

#define COMPRESSED_BUFFER_SIZE (25*1024) // maximal size of single compressed image data
#define GIF_DEFAULT_BKCOLOR (0xffff)
#define CODE_UPPER_BOUND 4096 // decided by algorithem itselt, maximal size of string table

typedef unsigned short COLORREF;

typedef struct tagCodeTableItem
{
unsigned short ushPrevIndex; // Previous code index
unsigned char uchCharacter; // character added this time
unsigned char uchFirstChar; // first character of the string this code corresponding to
unsigned char* pUchStringAddr; //
unsigned short ushStringLength;
} CODE_TABLE;

typedef struct tagImageInfoParameter
{
unsigned short ushImageLeftPosition;
unsigned short ushImageTopPosition;
unsigned short ushImageWidth;
unsigned short ushImageHeight;
unsigned short ushDelay;
bool blLocalColorTableFlag;// whether this image use private color table
unsigned short ushSizeofLocalColorTable;
bool blTransparentColorFlag;// whether this image use transparent index data
unsigned char uchTransparentColorIndex;
bool blInterlaceFlag; // whether this image is interlaced
bool blSortFlag; // not so important for our LCD device
unsigned short ushReserved;
} IMAGE_INFO_PARAMETER; //used as function parameter which could provided more information than usually used para

#define MAX_IMAGE_COUNT 20 // can process as many as MAX_IMAGE_COUNT sub-image of a gif file
//if it contains more than MAX_IMAGE_COUNT subimages

typedef struct tagImageRawInfo // used to keep raw subimage information
{
bool blGraphicControlExtension;
unsigned char uchGCE[8];
bool blImageDescriptor;
unsigned char uchImgDesp[12];
const unsigned char*pUchCodedImageData;
const unsigned char*pUchLocalColorTable;
} IMAGE_RAW_INFO;

typedef struct gif_context
{
IMAGE_RAW_INFO g_ImageRawInfo[MAX_IMAGE_COUNT];
CODE_TABLE g_CodeTable[CODE_UPPER_BOUND];
unsigned char g_uchLZWCodeSize; // 初始的压缩code size
unsigned char g_uchOffset; // 取code时基于位的偏移
const unsigned char*g_pUchCompressedData; // 指向压缩数据的首指针
unsigned char* g_pImageIndexData; // 指向解压缩后数据的首指针
unsigned char* g_pUchImageIndexPos;
unsigned short gifThisWidth;
unsigned short gifThisHeight;
unsigned short g_ushImageCount;
COLORREF g_bkColor;
////////////////2004/06/22
unsigned char DisposalMethod;
gdc_t *FirstFrameSd;// 当Disposal Method 为1,
//且存在尺度变换,需要保留第一帧数据备用
unsigned long length; // add for techfaith porting,08/01/2007
} GIF_CONTEXT, LPGIF_CONTEXT;

bool _GetGifFileInfor(GIF_CONTEXT* pGif_Context,const unsigned char* pGifFileStream);
bool pt_gif_draw_one_frame(gdc_t* sd, short x, short y,
const unsigned char* pGifData,int iFrameNum);

/************************************************************
*
* gif playing using task, currently support up to
* MAX_CONCURRENCE_NUMBER gif playing concurrently
*
*************************************************************/

//#define MAX_CONCURRENCE_NUMBER 8
//#define PV_GIF_PLAYING_INTERVER 1000
//#define GIFPLAY_FREE 0
//#define GIFPLAY_BUSY 1

typedef struct
{
GIF_CONTEXT gif_Context;
COLORREF Palette[384];
//unsigned long taskEntry;
//void* Form;
unsigned short playIndex;
unsigned short frameNumber;
unsigned short playTimes;
//unsigned char timerNo;
const unsigned char*pGifFileStream;
unsigned char* pDecodedBuf;
unsigned short width, height;
short x, y;
bool UseShrink;
unsigned short DispWidth, DispHeight;
gdc_t *gdc;
} gif_handle_t,*GIFPLAY_HANDLE;

#endif // _GIF_H


【干货】一文读懂gif动图的原理&制作方法深度解析
【深度解析】探索GIF动图的秘密:原理与制作指南1. 动图定义与理解 动图,即我们常说的GIF图片,是一种特殊的图像格式,它将多帧图像数据组合在一起,形成动态展示的序列。官方定义是,这种文件能逐帧显示,创造出简单而有趣的动画效果。2. 动图的日常应用 动图在生活中无处不在,它们活跃在表情包...

GIF 文件格式解析
GIF图像数据使用了LZW压缩算法,大大减小了图像数据的大小。图像数据在压缩前有两种排列格式:连续的和交织的(由图像标识符的交织标志控制)。连续方式按从左到右、从上到下的顺序排列图像的光栅数据;交织图像按下面的方法处理光栅数据:

Photoshop详细解析GIF动画图片的优化技巧
01.直接拖拽视频到PS中,然后,在时间轴面板上移动入点和出点,来选择所需要的片段,如下图所示。当然,也可以结合当前时间指示器(即时间轴面板中那条红色竖线)来用剪刀工具直接剪断视频,把不需要的部分删掉即可。02.选择菜单栏的“文件>导入>视频帧到图层”,然后在打开的面板中,如下图所示,同样...

Photoshop解析网页图中的GIF图片应用与处理
1.以上图为例,我们要做一个在灰色背景上显示的GIF图片,首先用QQ截图,再在PS取色(这里可以忽略QQ缺色造成的不精确问题),打上你要打的字和图片。2.把你的这些文字(图片)放到一个层里保存并复制一份。3.先建一个空白层在复制的组上面:4.按住CTRL同时选中“图层3”和“组1副本”,然后按ctrl...

图片合成、GIF图片的合成与解析
(1)GIF图片分解为单帧图片。(2)一系列单帧图片合成GIF图片。(3)iOS系统上展示GIF动画效果。在GIF的合成和分解方面将会接触到iOS图像处理核心框架ImageIO,作为iOS系统中图像处理的核心框架,它为我们提供了各种丰富的API,本文将要实现的GIF分解与合成功能,通过ImageIO就可以很方便地实现。GIF动画...

什么是gif,jpg, jpeg 图片
分类: 电脑\/网络 >> 软件 >> 多媒体软件 解析:和jpeg是一样的,同一种图片格式,前者是后者的缩写,都是位图格式。gif也是一种位图格式,但是它的大小相对jpeg来说小些,同时支持动画,而jpeg不支持。

求GIF格式图片解析显示的C语言源码
} GIF_CONTEXT, LPGIF_CONTEXT;bool _GetGifFileInfor(GIF_CONTEXT* pGif_Context,const unsigned char* pGifFileStream);bool pt_gif_draw_one_frame(gdc_t* sd, short x, short y,const unsigned char* pGifData,int iFrameNum);\/ gif playing using task, currently support up to M...

Photoshop详细解析GIF动画中批量处理技巧
先看看最终效果图 准备好GIF素材,这里我是直接在网上下载一张GIF图片。打开后的GIF图片你会发现PS里有好多图片。接着执行“文件”--“脚本”--“将图层导出到文件...",调出如下图对话框,根据需要设置就可以了。这里我设置文件格式为PNG。2. 执行“将图片导出到文件...”成功后,你打开刚才保存...

请问图片的几种格式,有什么区别呢?谢谢了~``!
GIF是英文Graphics Interchange Format(图形交换格式)的缩写。顾名思义,这种格式是用来交换图片的。事实上也是如此,上世纪80年代,美国一家著名的在线信息服务机构CompuServe针对当时网络传输带宽的限制,开发出了这种GIF图像格式。 GIF格式的特点是压缩比高,磁盘空间占用较少,所以这种图像格式迅速得到了广泛的应用。 最初...

jpg gif格式是位图还是矢量图?矢量图的扩展名是什么?
jpg和gif格式是位图,不是矢量图。常用的矢量格式有:*.bw是包含各种像素信息的一种黑白图形文件格式。 *.cdr (CorelDraw) *.cdr是CorelDraw中的一种图形文件格式。它是所有CorelDraw 应用程序中均能够使用的一种图形图像文件格式。 *.col(Color Map File) *.col是由Autodesk Animator、Autodesk Animator Pro...

龙凤区18249207052: 如何用c语言以二进制流的方式读取并显示gif文件 -
姚嘉利多: 二进制打开文件fopen(filename,"rd") 二进制读可以用 fscanf()#include #include #include int main(void) { FILE * fp; char * filename = "test.dat"; int i; char str[128]; if( (fp=fopen(filename,"rb"))== NULL ) {

龙凤区18249207052: 如何用C语言以二进制的方式打开BMP,GIF,JEP图像? -
姚嘉利多: fopen,里参数用b就可以用二进制打开了啊.fopen( "data", "rb" ))

龙凤区18249207052: 怎么将gif格式的图片转换为c语言程序? -
姚嘉利多: 图片是不能转换成C程序的,只有通过调用,才能实现图片的输出.例如,我们常见的网游,就是通过一系列的调用其本身已有的图片或动画来实现的,所以做网游的公司里,学美术的人是必不可少的.具体方法看书吧,书上都有详细的解答的.

龙凤区18249207052: 如何用C语言读取BMP,GIF,JEP图像?
姚嘉利多: 1. 如果你是用VC编译的话,你可以加头文件#include<afx.h>然后在工程-->设置那,Microsoft基础类,选择“使用MFC作为静态链接库”. 之后就可以用BTYE这个类型了... 2. 其实BTYE就是 unsigned char ; 所以直接用unsigbed char 就行了. 3. typedef BYTE (unsigned char); 上面三种任选一种.

龙凤区18249207052: 谁能提供关于jpg和bmp两种格式到图片解码的代码吗?用C语言写的. -
姚嘉利多: http://blog.csdn.net/brew2003/archive/2008/03/08/2158840.aspx 使用系统imgdecmp库解码JPG,GIF,PNG,BMP图片带源码.你可以看看.

龙凤区18249207052: c++如何打开一张jpg图片? -
姚嘉利多: C++ bulider 中使用TImage控件可以打开jpg,bmp等图片,gif要使用其它的第三方组件,tif,png等格式也是如此

龙凤区18249207052: 怎样在c++程序中显示gif图片 -
姚嘉利多: 应该就是循环播放动画帧了 或者你找个解析gif的代码

龙凤区18249207052: 怎样用C语言显示一张jpg的图片呢 -
姚嘉利多: 可以用函数OleLoadPicture从包含有图像数据的流中装载图像. 具体实现代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 ...

龙凤区18249207052: C语言实现图像格式的转化!!!求救!!!哭了!!!! -
姚嘉利多: http://www.codeproject.com/Questions/590614/convertplusjpegplusorplusbmpplustopluspgmplusforma 参考一下这个连接,可以先把文件格式转到BMP格式,再在BMP格式下调整分辨率,然后传到PGM

龙凤区18249207052: 如何用c语言编程读入一张png格式的图片. -
姚嘉利多: 转成资源文件,之后再读

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网