GIF文件的数据结构以及播放和分解GIF的源代码

合集下载

gif生成原理

gif生成原理

gif生成原理
GIF是一种动态图像格式,使用LZW(Lempel-Ziv-Welch)压缩算法将多个静态图像帧存储在一个文件中。

在生成GIF时,以下原理会被应用:
1. 收集静态图像帧:首先,需要准备一系列静态图像帧,它们将被合并以创建动态效果。

这些图像帧可以是从视频中提取的连续帧,或者是通过绘制每个图像帧的逐渐变化而生成的。

2. 压缩图像数据:对于每个静态图像帧,使用LZW压缩算法
对图像的像素数据进行压缩。

LZW算法通过将连续出现的像
素值替换为短代码来减小数据大小。

这些代码将在后续步骤中被解码以恢复原始图像数据。

3. 创建图像标识符表:为了更有效地存储图像数据,GIF使用
一个图像标识符表,它将图像数据与特定的图像标识符相对应。

图像标识符表中的每个条目包含压缩图像数据和一个唯一的标识符。

4. 创建图像描述符:对于每个图像帧,创建一个图像描述符用于指定图像在文件中的位置、尺寸等信息。

该描述符还包含一个指向图像数据的指针,该指针指向图像标识符表中与该图像帧对应的图像数据。

5. 创建图像控制扩展块:为了控制GIF动画的播放速度和循
环次数,可以创建额外的图像控制扩展块。

该块中包含与动画延迟时间、透明度等相关的信息。

6. 将所有数据组合:将所有图像帧的图像描述符、图像控制扩展块、图像标识符表以及压缩后的图像数据按照一定的结构组合在一起,形成一个完整的GIF文件。

通过这个过程,生成的GIF文件包含了多个静态图像帧的压缩数据和相关的控制信息,使得可以在各种设备和平台上播放这些图像帧并呈现出动态效果。

ffmpeg转gif原理

ffmpeg转gif原理

ffmpeg转gif原理题为"[ffmpeg转gif原理]"的文章在3000到6000字之间,可以逐步解析FFmpeg如何转换视频为GIF动画。

下面是详细的分析:第一步:FFmpeg简介(250-500字)首先,我们需要对FFmpeg进行介绍。

FFmpeg是一套开源的音视频处理工具,可以用于录制、转换和流传输音视频。

FFmpeg包含了大量的器具和库,能够通过命令行对各种音视频格式进行编码和解码。

它是非常流行且功能强大的音视频处理工具,被广泛应用于各种平台和应用程序中。

第二步:GIF简介(250-500字)接下来,我们需要了解一下GIF的基本知识。

GIF(Graphics Interchange Format)是一种常用的图像文件格式,广泛应用于网络和多媒体中。

与常见的JPEG和PNG图像格式不同,GIF图像可以包含多帧,并支持动画效果。

GIF图像使用LZW压缩算法,以及256色调色板,适合用于显示简单的动画效果和低分辨率的图片。

第三步:FFmpeg转换视频为GIF的基本步骤(500-1000字)现在让我们来分析FFmpeg如何实现将视频转换为GIF的基本步骤。

1. 解码视频帧:首先,FFmpeg需要从视频文件中读取原始的视频数据。

它通过使用各种解码器来将视频帧从压缩格式(如H.264或MPEG)解码为原始帧数据。

这些解码器被称为Codec,FFmpeg中包含了许多不同的Codec。

2. 调整帧大小:下一步,FFmpeg会根据所需的GIF图像尺寸,将每个视频帧调整为适当的大小。

通常情况下,GIF图像的尺寸比原始视频的尺寸要小,因此需要对每个帧进行缩放。

3. 转换为256色调色板:GIF图像只支持256种颜色,因此FFmpeg需要将每个视频帧的颜色转换为256调色板中的颜色。

它使用一种称为调色板的数据结构,其中包含256个颜色值,然后将视频帧中的每个像素映射到最接近的调色板颜色。

GIF图形文件格式介绍和说明剖析.

GIF图形文件格式介绍和说明剖析.

GIF 图形文件格式文档1.概述GIF 图象是基于颜色列表的(存储的数据是该点的颜色对应于颜色列表的索引值),最多只支持8位(256色)。

GIF 文件内部分成许多存储块,用来存储多幅图象或者是决定图象表现行为的控制块,用以实现动画和交互式应用。

2.GIF 文件存储结构GIF 文件内部是按块划分的,包括控制块( Control Block )和数据块(Data Sub-blocks )两种。

控制块是控制数据块行为的,根据不同的控制块包含一些不同的控制参数;数据块只包含一些8-bit 的字符流,由它前面的控制块来决定它的功能,每个数据块0到255个字节,数据块的第一个字节指出这个数据块大小(字节数),,所以一个空的数据块有一个字节,那就是数据块的大小0x00。

下表是一个数据块的结构: BYTE 7 6 5 4 3 2 1 0 BIT0 块大小 Block Size - 块大小,不包括这个这个字节(不计算块大小自身)1Data Values - 块数据,8-bit 的字符串 2...254255一个GIF 文件的结构可分为文件头(File Header)、GIF 数据流(GIF Dat a Stream)和文件终结器(Trailer)三个部分。

文件头包含GIF 文件署名(Signa ture)和版本号(Version);GIF 数据流由控制标识符、图象块(Image Block)和其他的一些扩展块组成;文件终结器只有一个值为0x3B 的字符(';')表示文件结束。

下表显示了一个GIF 文件的组成结构:GIF 署名 文件头 版本号逻辑屏幕标识符GIF 数据流全局颜色列表...图象标识符 图象块 图象局部颜色列表图 基于颜色列表的图象数据...GIF 结尾 文件结尾下面就具体介绍各个部分: 文件头部分(Header)GIF 署名(Signature)和版本号(Version)GIF 署名用来确认一个文件是否是GIF 格式的文件,这一部分由三个字符组成:"GIF";文件版本号也是由三个字节组成,可以为"87a"或"89a".具体描述见下表:BYTE 7 6 5 4 3 2 1 0 BIT1 'G'GIF 文件标识 2 'I'3 'F'4 '8' GIF 文件版本号:87a - 1987年5月 89a - 1989年7月5 '7'或'9'6 'a'GIF 数据流部分(GIF Data Stream)逻辑屏幕标识符(Logical Screen Descriptor)这一部分由7个字节组成,定义了GIF 图象的大小(Logical Screen Width & Height)、颜色深度(Color Bits)、背景色(Blackground Color Index)以及有无全局颜色列表(Global C olor Table)和颜色列表的索引数(Index Count),具体描述见下表: BYTE 7 6 5 4 3 2 1 0 BIT1 逻辑屏幕宽度 像素数,定义GIF 图象的宽度 23 逻辑屏幕高度 像素数,定义GIF 图象的高度 45 m cr s pixel6 背景色 背景颜色(在全局颜色列表中的索引,如果没有全局颜色列表,该值没有意义)7 像素宽高比 像素宽高比(Pixel Aspect Radio)m - 全局颜色列表标志(Global Color Table Flag),当置位时表示有全局颜色列表,pixel 值有意义.cr - 颜色深度(Color ResoluTion),cr+1确定图象的颜色深度.s - 分类标志(Sort Flag),如果置位表示全局颜色列表分类排列.pixel - 全局颜色列表大小,pixel+1确定颜色列表索引数(2的pixel+1次方). 全局颜色列表(Global Color Table)全局颜色列表必须紧跟在逻辑屏幕标识符后面,每个颜色列表索引条目由三个字节组成,按R 、G 、B 的顺序排列。

GIF动画

GIF动画

GIF动画GIF动画GIF(Graphics Interchange Format)的原义是“图像互换格式”,是CompuServe公司在1987年开发的图像文件格式。

GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。

其压缩率一般在50%左右,它不属于任何应用程序。

目前几乎所有相关软件都支持它,公共领域有大量的软件在使用GIF图像文件。

GIF图像文件的数据是经过压缩的,而且是采用了可变长度等压缩算法。

GIF格式的另一个特点是其在一个GIF文件中可以存多幅彩色图像,如果把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。

目录历史分类Gif文件格式制作软件如何制作编辑本段历史在早期,GIF所用的LZW压缩算法是Compuserv所开发的一种免费算法。

然而令很多软件开发商感到意外的是,GIF文件所采用的压缩算法忽然成了Unisys公司的专利。

据Unisys公司称,他们已注册了LZW算法中的W部分。

如果要开发生成(或显示)GIF文件的程序,则需向该公司支付版税。

由此,人们开始寻求一种新技术,以减少开发成本。

PNG (Portable Network Graphics,便携网络图形)标准就在这个背景下应运而生了。

它一方面满足了市场对更少的法规限制的需要,另一方面也带来了更少的技术上的限制,如颜色的数量等。

在2003年6月20日,LZW算法在美国的专利权已到期而失效。

在欧洲、日本及加拿大的专利权亦已分别在2004年的6月18日、6月20日和7月7日到期失效。

尽管如此,PNG文件格式凭着其技术上的优势,已然跻身于网络上第三广泛应用格式。

与GIF相关的专利于2006年8月11日过期。

编辑本段分类尾记录该块为一个单字段块,用来指示该数据流的结束。

取固定值0x3b. 编辑本段制作软件目前从动画或影视剧中截取并加工GIF动态图的软件有许多,最常见的有“QQ影音”和“Ulead GIF Animator“ 等,具体可以根据个人喜好加以选择。

gif文件格式总结

gif文件格式总结

GIF文件格式总结 1 创建一个gif动态图片,两帧,每帧间隔显示时间为0.5s,第一帧为10*10像素蓝色(R:255,G:0,B:0)正方形,第二帧为10*10像素红色正方形(R:0,G:0,B:255),文件存储格式如图一所示:

图一 2 图二所示内容为文件头部分,包括GIF署名(Signature)和版本号(Version),GIF署名用来确认一个文件是否是GIF格式的文件,这一部分由三个字符组成:"GIF";文件版本号也是由三个字节组成,可以为"87a"或"89a"。

图二 3 图三所示内容为逻辑屏幕标识符,这一部分由7个字节组成,定义了GIF图象的大小(Logical Screen Width & Height)、颜色深度(Color Bits)、背景色(Blackground Color Index)以及有无全局颜色列表(Global Color Table)和颜色列表的索引数(Index Count)。 第一、二个字节(0A 00)为图像的宽度10像素。 第三、四个字节(0A 00)为图像的高度10像素 第五个字节为包装域,(A1)转换为二进制为【1 010 0 001】从右往左排序 0-2位001表示全局彩色表大小(Size of Global Color Table)表示表示每个像素的位数,它用来计算全局彩色表(Global Color Table)中包含的字节数。在全局彩色表标志(Global Color Table Flag)域G=0时就不需要计算,G=1时就要计算彩色表的大小, 001+1确定颜色列表的索引数(2的001+1次方). 3位0表示彩色表排序标志(Sort Flag)域,用来表示全局彩色表(Global Color Table)中的颜色是否按重要性(或者称使用率)排序。如果为0,表示没有重要性排序;如果为1表示最重要的颜色排在前。这样做的目的是辅助颜色数比较少的解码器能够选择最好的颜色子集,在这种情况下解码器就可选择彩色表中开始段的彩色来显示图像。 4-6位010表示彩色分辨率(Color Resolution)域,用来表示原始图像可用的每种基色的位数(实际值减1)。这个位数表示整个调色板的大小,而不是这幅图像使用的实际的颜色数。例如,如果该域的值CR=3,说明原始图像可用每个基色有4位的调色板来生成彩色图像。 7位1表示全局彩色表标志(Global Color Table Flag )域G用来说明是否有全局彩色表存在。如果G=1,表示有一个全局彩色表(Global Color Table)将紧跟在这个逻辑屏幕描述块(Logical Screen Descriptor)之后;这个标志也用来选择背景颜色索引(Background Color Index)。如果G=1,背景颜色索引(Background Color Index)域中的值就用作背景颜色的索引。 第六个字节(00)为背景颜色(在全局颜色列表中的索引,如果没有全局颜色列表,该值没有意义)。 第七个字节(00)为像素宽高比。

java实现gif动画效果(java显示动态图片)

java实现gif动画效果(java显示动态图片)

java实现gif动画效果(java显⽰动态图⽚)就是每隔⼀定的时间显⽰⼀张图⽚,全部图⽚⽂件位于:“⼯作空间\项⽬名称\bin\动态图\花好⽉圆\”⽂件夹下。

⽂件名类似:1001.jpg,1002.jpg,⼀直到1016.jpg:复制代码代码如下:/** Donttai.java** Created on __DATE__, __TIME__*/package 动态图;import java.awt.Graphics;import java.awt.Image;import java.awt.image.ImageObserver;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/**** @author __USER__*/public class Donttai extends javax.swing.JFrame implements Runnable{/** Creates new form Donttai */public Donttai(){initComponents();}//String path = "E:\\Workspaces\\MyEclipse_9.0\\20120731\\bin\\动态图\\1\\10";//Java默认⽂件路径是项⽬的根⽬录,所以要⼿动加上bin及其以下的路径String path="bin/动态图/花好⽉圆/10";int idx = 1;public void paint(Graphics g){ImageObserver imageObserver = new ImageObserver(){@Overridepublic boolean imageUpdate(Image img, int infoflags, int x, int y,int width, int height){// TODO Auto-generated method stubreturn false;}};try{//g.drawImage(ImageIO.read(new File(Donttai.class.getResource("1.png").toString())), 20, 20, imageObserver);String temp = "";if (idx <= 9)temp = path + "0" + idx + ".jpg";else if (idx >= 10){temp = path + idx + ".jpg";}g.drawImage(ImageIO.read(new File(temp)), 100, 50, 400, 300,imageObserver);}catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}}/** This method is called from within the constructor to* initialize the form.* WARNING: Do NOT modify this code. The content of this method is* always regenerated by the Form Editor.*///GEN-BEGIN:initComponents// <editor-fold defaultstate="collapsed" desc="Generated Code">private void initComponents(){jButton1 = new javax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jButton1.setText("jButton1");javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup().addContainerGap(483, Short.MAX_VALUE).addComponent(jButton1).addGap(35, 35, 35)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(37, 37, 37).addComponent(jButton1).addContainerGap(392, Short.MAX_VALUE)));pack();}// </editor-fold>//GEN-END:initComponents/*** @param args the command line arguments*/public static void main(String args[]){// java.awt.EventQueue.invokeLater(new Runnable()// {// public void run()// {// new Donttai().setVisible(true);//// }// });Donttai donttai = new Donttai();donttai.setVisible(true);donttai.run();}//GEN-BEGIN:variables// Variables declaration - do not modifyprivate javax.swing.JButton jButton1;// End of variables declaration//GEN-END:variables @Overridepublic void run(){// TODO Auto-generated method stubwhile (true){repaint();if (idx < 16)idx++;elseidx = 1;try{Thread.sleep(60);}catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}}}}。

播放GIF动画_Android Studio应用开发实战详解_[共2页]

播放GIF动画_Android Studio应用开发实战详解_[共2页]

11.7实现动画效果的其他方法 223android:id="@+id/imageView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:src="@drawable/cool"/>(2)编写文件MainActivity.java,主要实现代码如下所示。

public class MainActivity extends Activity {private Bitmap bm;private ValueAnimator animator;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);BitmapDrawable m=(BitmapDrawable)getResources().getDrawable(R.drawable.cool);bm=m.getBitmap();animator= ValueAnimator.ofFloat(0f, 1f);animator.setDuration(1000);animator.setTarget(bm);animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {public void onAnimationUpdate(ValueAnimator animation) {}});animator.start();}执行后将在屏幕中实现简易的动画效果,如图11-16所示。

在VB6中播放GIF动画

在VB6中播放GIF动画

在VB6中播放GIF动画2009年04月20日星期一 05:10 P.M.摘要:由于GIF 格式动画文件具有小巧、制作方便等特点,因此在网上得到广泛应用,但遗憾的是VB 中的多媒体控件却无法播放它,这给我们设计VB 应用程序带来了不便。

在此我们向大写介绍一种利用网络浏览器IE 实现在VB 中播放GIF 动画的方法。

并给出一个简捷、实用的“ 画中画” 滚动显示程序。

---- GIF 动画格式文件是一种动态存储的图形格式文件。

在内容相同的条件下,与其它格式文件相比,由于它占用的存储空间少,且制作手段成熟,可浏览的软件工具也很多,所以倍受设计者的青睐。

然而令人遗憾的是,在Visual Basic 中,无论是多媒体控件MCI、MCIWnd,还是Animation 控件, 甚至调用Windows API 函数都无法播放GIF 格式的动画文件。

造成这一现象的原因在于GIF 动画格式文件不是VB 多媒体控件所支持的视频格式文件(VB 多媒体控件所支持的视频格式文件主要有:AVI 格式、MOV 格式、FLI 格式、FLC 格式等)。

以往我们的解决方法是:首先利用一些格式转换工具,比如GIF Movie Gear 将GIF 格式的动画文件转换为AVI格式的动画文件,然后再用多媒体控件MCI和MCIWnd 进行播放。

但这种做法主要存在以下两个缺陷:---- 1 .所形成的AVI 格式动画文件太大(常常是GIF 格式文件的几十倍),从而影响系统的效率。

---- 2 .所形成的AVI 格式动画文件往往带有比较复杂的调色板信息,所以当程序在播放这种AVI 格式动画文件时,如果还兼有动态显示的文字和图象信息,则整个画面就会产生抖动和闪烁,从而使显示效果大受影响。

---- 为解决这个问题,我们在此提出一个全新的处理方案 : 通过在VB 中调用IE 浏览器来实现GIF 动画的播放,实际使用表明:效果甚好。

---- 一、浏览器IE 和WebBrowser 控件---- 众所周知,运行VB6.0 需要安装浏览器IE4.0或以上版本,当IE4.0 和VB6.0 安装完成后,我们便可以在VB6.0 中使用IE 所提供的WebBrowser 控件播放GIF 动画了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GIF文件的数据结构以及播放和分解GIF的源代码GIF 文件内部是按块划分的,包括控制块和数据块两种。

控制块控制数据块的行为,不同的控制块包含不同的控制参数。

数据块只包含一些8bit的字符流,由它前面的控制块来决定它的功能,每个数据块0—255个字节,数据块的第一个字节指出这个数据块长度(字节数),计算数据块的长度时不包括这个字节,所以一个空的数据块也有一个字节,那就是数据块的大小&H00。

控制块中的逻辑屏幕描述块和全局彩色表的作用范围是整个数据流, 其他控制块仅控制跟在它们后面的图形描述块。

GIF文件的典型结构如下表所示。

---------------------------------------顺号结构名称长度(字节)---------------------------------------1GIF文件头 62逻辑屏幕描述块73全局彩色表≤7684图形描述块105局部彩色表(可重复n次)≤7686表式压缩图像数据7图像控制扩展块88无格式文本扩展块9注释扩展块4-25810 应用程序扩展块11 GIF文件结束块 1----------------------------------------一、控制块1. GIF文件头文件头由6个固定字节组成,结构如下表所示。

单位:字节---------------------偏移量长度域名称---------------------03GIF标记33版本号---------------------GIF标记存放的是“GIF”的Ascii码,版本号存放的是1987年5月发布的“87a”或者1989年7月发布的“89a”,或者更加新的版本号。

2. 逻辑屏幕描述块逻辑屏幕描述块紧跟在GIF文件头之后。

逻辑屏幕描述块由7个固定字节组成,包含定义图像显示区域的参数,包括背景颜色信息。

这个数据块中的坐标相对于虚拟屏幕的左上角,不一定是指显示屏幕的绝对坐标。

逻辑屏幕描述块的结构如下表所示:单位:字节--------------------------------偏移量长度域名称--------------------------------62逻辑屏幕宽度(像素)82逻辑屏幕高度(像素)101包装域111背景颜色索引12 1像素宽高比--------------------------------说明:(1) 包装域是描述彩色表属性的,这一个字节又由4个子域组成:0-2位:全局彩色表大小域Size,表示表示每个像素的位数,它用来计算全局彩色表中包含的字节数。

在全局彩色表标志域G=0 时就不需要计算,G=1 时就要计算彩色表的大小,具体计算见下文的"3. 全局彩色表"。

3位:彩色表排序标志域S,用来表示全局彩色表中的颜色是否按重要性(或者称使用率)排序。

如果S=0,表示没有重要性排序;如果S=1 表示最重要的颜色排在前。

这样做的目的是辅助颜色数比较少的解码器能够选择最好的颜色子集,在这种情况下解码器就可选择彩色表中开始段的彩色来显示图像。

4-6位:彩色分辨率域CR,用来表示原始图像可用的每种基色的位数(实际值减1)。

这个位数表示整个调色板的大小,而不是这幅图像使用的实际的颜色数。

例如,如果该域的值CR=3,说明原始图像可用每个基色有4位的调色板来生成彩色图像。

7位:全局彩色表标志域G 用来说明是否有全局彩色表存在。

如果G=1,表示有一个全局彩色表将紧跟在这个逻辑屏幕描述块之后;这个标志也用来选择背景颜色索引,如果G =1,背景颜色索引域中的值就用作背景颜色的索引。

(2)背景颜色索引是彩色表的一个索引值,用来指定背景颜色。

如果全局彩色表标志域G=0,这个域的值也设置为0。

(3) 像素宽高比域中的值是一个因数,是计算原始图像像素的宽高比的一个近似值。

如果该域的值范围为1~255,宽高比的近似值按下式计算:Aspect Ratio = (Pixel Aspect Ratio + 15) / 64比值的范围在4:1~1:4之间,其增量为1/64。

3. GIF文件结束块结束块在GIF文件的最后,它是一个固定的数值&H3B。

4、扩展控制块这一部分是可选的(需要89a版本),扩展控制块的标记是&H21(又称扩展导入符),用于识别扩展块的开始。

在扩展导入符后是扩展标签。

①图形控制扩展块用来控制跟在它后面的第一个图象(或文本)的渲染形式,扩展标签为&HF9,其结构如下表所示:单位:字节------------------------------------------偏移量长度域名称------------------------------------------01扩展导入符(&H21)11图形控制标签(&HF9)21块大小域(&H04)31包装域42延迟时间61透明色索引71块结束符(&H00)------------------------------------------说明:(1)块大小域用来说明该扩展块所包含字节数,该字节数是从块大小域之后到块结束符之前的字节数,固定为&H4。

(2)包装域的结构如下表所示:0位:透明标志1位:用户输入标志,表示在继续处理之前是否需要用户输入(按回车键或鼠标点击等)。

在延时时间和用户输入标志都设置为1的情况下,继续处理的开始时间取决于用户响应输入在前还是延迟时间结束在前。

2-4位:处理方法,处理方法规定图形显示之后译码器要用下表所述方法进行处理:--------------------------------------域值方法--------------------------------------0不使用处理方法1不处理图形,图形留在原处2显示图形的区域必须恢复成背景颜色3恢复成以前显示的图形4-7未定义--------------------------------------5-7位:保留的(3)延迟时间:单位1/100秒,如果值不为1,表示暂停规定的时间后再继续往下处理数据流。

(4)透明色索引:当透明标志位设置为1时,透明索引指示处理程序要修改显示设备上的相应像点。

(5)块结束符表示该图形控制扩展块结束,它是一个固定的数值&H0,因此称为零长度数据子块。

②无格式文本扩展块无格式文本扩展块用来绘制一个简单的文本图象,由纯文本数据(7-bit ASCII 字符)和控制绘制的参数等组成。

绘制文本借助于一个文本框来定义边界,在文本框中划分多个单元格,每个字符占用一个单元,绘制时按从左到右、从上到下的顺序依次进行,直到最后一个字符或者占满整个文本框(之后的字符将被忽略,因此定义文本框的大小时应该注意到是否可以容纳整个文本),绘制文本的颜色使用全局颜色列表,没有则可以使用一个已经保存的前一个颜色列表。

另外,图形文本扩展块也属于图形块(Graphic Rendering Block),可以在它前面定义图形控制扩展对它的表现形式进一步修改。

其扩展标签为&H1,结构如下表所示:单位:字节------------------------------------------------------------顺号长度域名称------------------------------------------------------------11扩展导入符(&H21)21无格式文本标签(&H1)31块大小(&H0C)42文本框离逻辑屏幕的左边界距离(像素)52文本框离逻辑屏幕的上边界距离(像素)62文本框宽度(像素)72文本框高度(像素)81每个单元宽度(像素)91每个单元高度(像素)101前景色在全局颜色列表中的索引111背景色在全局颜色列表中的索引12文本:一个或多个数据块组成,保存要显示的字符串131块结束符(&H00)------------------------------------------------------------说明:(1)由于文本的字体(Font)和尺寸(Size)没有定义,解码器应该根据情况选择最合适的(2)如果一个字符的ASCII码小于&H20或大于&HF7,则这个字符被推荐显示为一个空格(0x20)(3)为了兼容性,最好定义字符单元格的大小为8x8或8x16③注释扩展块注释扩展块域的内容用来说明图形、版权、描述等其他任何非图形数据和控制信息的文本信息(解码器完全可以忽略它)。

扩展标签为&HFE。

注释扩展块的结构如下表所示:单位:字节--------------------------------顺号长度域名称--------------------------------11扩展导入符(&H21)21注释标签(&HFE)31—255注释数据41块结束符(&H00)--------------------------------④应用扩展块应用扩展块是提供给应用程序自己使用的,应用程序可以在这里定义自己的标识、信息等,扩展标签为&HFF,结构如下表所示:单位:字节------------------------------------------------------顺号长度域名称------------------------------------------------------11扩展导入符(&H21)21扩展标签(&HFF)34块大小(&H0B)48应用程序标识符(ASCII码),典型值为NETSCAPE53应用程序鉴别码(ASCII码),典型值为2.07应用程序自定义数据块,典型值为&H381块结束符(&H00)------------------------------------------------------⑤全局彩色表全局彩色表紧跟在逻辑屏幕描述块之后。

由于一个GIF文件可以包含多幅彩色图像,每幅彩色图像也许都包含适合自身特点的彩色表,所以一个GIF文件可以有好几个彩色表。

但归纳起来只有两类:全局彩色表或局部彩色表。

全局彩色表可用于图像本身没有带彩色表的所有图像和无格式文本扩展块,而局部彩色表只用于紧跟在它后面的一幅图像。

在处理全局彩色表和局部彩色表时需要注意下面一些规则。

①如果GIF文件包含全局彩色表,而且要显示的图像本身又带有局部彩色表,那末显示该幅彩色图像时就用它自己的彩色表,而不用全局彩色表。

在这种情况下,解码器就首先保存全局彩色表,然后使用局部彩色表来显示图像,最后再回复全局彩色表。

相关文档
最新文档