⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 专业tc--图形篇3.htm

📁 图形学的一些基础知识
💻 HTM
📖 第 1 页 / 共 4 页
字号:
done<BR>DeleteDC(hCompatDC);<BR><BR>return result;<BR>}<BR><BR><BR>1、优点 
提供足够的信息并很好地组织这些信息,使得许多不同的输出设备能够方便地交换图形,由于CompuServe网络的广泛流行,许多平台都支持GIF。CompuServe通过免费发行格式说明书来推广自己。GIF支持24位元彩色,由一个最多有256种颜色的调色板实现,图形大小最多是64K×64K个象点。GIF的特点,包括LZW压缩、多图形的定序、交错屏幕绘图以及文字重叠。<BR>2、缺点 
现行的GIF版本不能多于256个24位元彩色,它没有为储存灰度或彩色校正数据作准备,也不能储存CMYK或HSI格式的数据。<BR>3、变体 
GIF没有各种明显不同的模式(不像TIF或PCX那样)。尽管如此, 
GIF仍可以有许多的变化,一些变体和选择包括:<BR>·多图形<BR>·每个象点的元数<BR>·“逻辑”屏幕(围绕所有后续图形的一个图形平面)大小(用象点计算)<BR>·逻辑屏幕的横宽尺寸比<BR>·逻辑屏幕中图形的大小和位置<BR>·重叠文字的存在、大小和位置<BR>·图形序列—延时、使用者提示、交错的传输或者前一个图形的恢复。<BR>在早期GIF规范和当前规范之间存在一些变体(有两个GIF规范版本,一个在1987年,为“87a”,还有一个在1989年,为“89a”),新设计的应该使用最新版本,这里介绍的是最新版本。<BR>4、综述 
它主要是为数据序列设计的一种传输格式,而不是作为文件的储存格式,换句话说,它具有顺序的组织形式(像TIF那样的储存格式,更普遍地使用随机组织形式,而不是顺序组织形)。这种顺序性质对图形没有什么实际影响,除了多个图形的顺序传输和显示这种专门的和特殊的情况。<BR><BR>了理解GIF,请记住它主要是为数据流而设计的一种传输格式,而不是作为文件的存储格式。换句话说,它具有顺序的组织形式(像TIFF那样的存储格式,则更普遍地使用随机组织形式,而不是顺序组织形式)。<BR>GIF有五个主要部分以固定顺序出现,所有部分均由一个或多个块(block)组成。每个块由第一个字节中的标识码或特征码标识。这些部分的颀序为:头块、逻辑屏幕描述块、可选的“全局”色彩表块(调色板)、各图像数据块(或专用的块)以及尾块(结束码)。<BR>下面是这些部分的内容:<BR>(1)头是一个块,它识别数据流为GIF,并指示恰当地解释后面的数据所需的最早版本的GIF解码程序(87a或89a)。<BR>(2)逻辑程序描述块定义了包围所有后面图像的一个图像平面的大小、纵横尺寸比以及色彩深度(它类似于产生图像的监视器屏幕)。它还指明后面跟随的是否为“全局”色彩表。<BR>(3)全局色彩表(如果存在)构成一个24位RGB元组的调色板(每种底色为一个字节)。如果后面的像没有其自己的“局部”调色板,那么全局色表就是缺省调色板。<BR>(4)后续数据作为“图形”或“专用”块出现。图形块典型地包含一个或多个位图图像,也可能是覆盖的文本。专用块或者包含一个专用应用程序码,或者包含一句不可打印的注释。<BR>(5)最后的尾块只是值为3B(十六进制)的一个字节,表示数据流已结束。<BR>注意:文件中的GIF数据流可能根本就不包含任何位图数据,这时,它只是要传输全局色彩表,作为没有自己调色板的后续数据流的缺省调色板。<BR>这里是一个显示Gif文件的C语言程序,下面的代码是例程gifshow中的主函数部分:<BR>main(argc,argv)<BR>int 
argc;<BR>char *argv[];<BR>{kk1}<BR>int i;<BR><BR>if (argc&lt;=1) 
{kk1}<BR>Sound();<BR>graphinit();<BR>ShowPIC( (char far *)bufptr, Width, 
Depth);<BR><BR>if (argc&gt;=3) strcpy(filename, argv[2]);<BR>else 
{kk1}<BR>strcpy(filename+2, argv[1]);<BR>strncpy(filename, "X_", 2);<BR>if 
((strchr(filename,'.')-filename)&gt;8) strcpy(filename+8, ".GIF");<BR>}<BR>for 
(i=0; i&lt;(1&lt;&lt;BitsPerPixel)*3; i++) pgh-&gt;palette[i] &lt;&lt;= 
2;<BR>packgif(filename, Width, Depth, BitsPerPixel, pgh-&gt;palette, 
bufptr);<BR>Sound();<BR><BR>free(buffer);<BR>SetVGAMode(0x03);<BR>exit(0);<BR>return 
1;<BR>}<BR><BR>1.优点 
PCX是最老的,因此也是个人电脑软件中得到最为广泛使用的位元映射格式之一。当前的版本可使用24位元彩色,现实最多256色的调色扳或者全24位元的RGB,图形大小最多达64K×64K象点。数据是以运行长度编码(Run-Length 
Encoding)压缩。<BR>2.缺点 文件格式没有为储存灰度或彩色校正表留有余地,即不能储存CMYK 
(代表青色Cyaneous、紫红Magenta和黄色Yellow三种基本色,加上黑色black作对比)格式数据,也不能储存HSI格式数据[虽然有些Zsoft程序允许使用HSI 
(代表色调Hue、饱和度Saturetion和亮度Intensity)来调整彩色值]。它的运行长度压缩方法效率不高,尤其是对于扫描图形或视频信息图形。由于PCX的发展年代较老, 
PCX文件可以使用各种调色板技术,但其结果是大多数阅读程序不能处理所有可能的PCX格式图形。<BR>3.变体 
PCX随着Zsoft产品的新版本而升级,在文件头(Header)中的一个序码确定了该文件所能使用的Zsoft产品的版本。其中版本0为基本单色(2色)或4色图形;版本2在版本0的基础上加上了16色图形,版本5又加上了24位调色板的256色和全24位RGB彩色。<BR><BR>一、概述<BR>PCX格式由三个部分组成,即文件头、位图数据(较新版本的)和一个可达256种色彩的调色板。<BR>其文件由固定128字节的文件头开始。它除了版本号以外,还包括被打印或扫描图像的分辨率(单位为每英寸点数)、大小(单位为像素数)、每扫描行字节数、每像素位数和彩色平面数。文件还可能包括一个调色板以及表明该调色板是灰度还是彩色的一个代码。<BR>文件的核心部分是位图数据。位图数据以类似于Packbits 
压缩法的运行长度压缩形式记录,像素值通常是单字节的指针,指向调色板中的位置。<BR>如果版本号为5,则文件末尾处还有一个单一的位平面,一个RGB值的256色调色板三种底色各一个字节)。<BR>二、详解<BR>PCX 
格式用于写是相对较简单的,但用于读就比较棘手,除非知道被解码图像的很多细节内容(如位深度和调色板等)。因此,以下的阐述都是基于最坏的情况,即读取一个其特性和年代都未确定的PCX文件,所有的数均是little-endian(Intel)格式,即LSB在先。<BR>字节0,Zsoft标志<BR>总是十进制值160,即十六进制A0。<BR>字节1,版本号,<BR>一定程度上不可靠的文件内容指南,见前面一节“变体”的讨论。<BR>字节2,编码<BR>到目前为止,总是为1。当前编码(压缩)方法只有一种,即在下面“位图数据),一节中讲述的运行长度法。<BR>字节3,每像素位数<BR>实际上是每个位平面的每像素位数,可能的值是1、2、4或8。<BR>字节4-11,图像大小<BR>图像大小由最小的和最大的极限给出。通常的下限是0。所有的极限均用16位无符号整数表示,单位为像素。图像大小可以这样计算:XSIZE=Xmax―Xmin+l; 
YSIZE=Ymax-Ymin+l,单位为像素。<BR>字节12-15,以每英寸点数为单位的水平和垂直分辨率<BR>这两个16位的数字有点古怪,它们对于定义所存储图像不起任何作用,但是,当它们与图像大小组合起来加以考虑时,能产生出被扫描图像的原始大小,或者被打印图像的希望大小,以英寸为单位。<BR>字节16-63,头调色板<BR>这一字段看上去只适用于带有单一位平面、16种或更少的颜色以及版本号为2的文件(参见下面“解释数据的关键”口节)。使用时,调色板拥有16组三元组的单字节调色板值。<BR>字节65,色彩平面<BR>PCX图像可以是单色彩,也可以是多个色彩平面的(参见第一章)。头的这个字节给出色彩平面数,它是正确翻译PCX文件的关键。<BR>字节66,每行字节数<BR>实际是每个平面的每行的字节数—存储末压缩图像一个扫描行的一个色彩平面所需要内存字节数,它总是偶数。<BR>字节68,头调色板翻译<BR>1=彩色/单色;2=灰度。Paintbrush 
IV或Paintbrush IV PIus中不使用它。<BR>字节70~73,视屏屏幕大小,X和Y<BR>只被Paintbrush IV和Paintbrush 
IV 
PIus使用;并不是必不可少的,但是对于产生正确的外观比例(防止压缩型失真)可能有用。<BR>三、位图数据<BR>如果没有使用调色板,那么数据是实际的像素值;否则,它们是指向调色板值的指针。在后一种情况下,数据给出的是相对于所使用的调色板的起始处的偏移(比如在三字节的三元组值中,1=字节3)。<BR>当数据是实际的像素值时,它们按色彩平面和扫描行存储。例如,对于三种颜色红、绿和蓝(RGB),数据格式为:<BR>(第0行:)RRRRRR...GGGGGG...BBBBBB...<BR>(第1行:)RRRRRR...GGGGGG...BBBBBB...<BR>如果有两个平面,那么色彩是任选的;如果有三个平面,则颜色为RGB;如果使用四个平面,则它们是符合IBM 
CGA/EGA标准的单个位的平面:红、绿、蓝和光强(RGBI)。光强位只是给像素以一种名义上较高的亮度。<BR>当数据是指向某调色板指针时,它们就组成一个完整的图像平面(也就是说,它们不会分解成单独色彩平面)。然后数据按如下方式简单地编排(字符P代表各种指针值):<BR>(行0:)PPPPPP<BR>(行1:)PPPPPPP<BR>P的长度取决于深度,以每平面的每像素位数表示。例如,如果深度为4位,则P就是半个字节长。<BR>所有情况下,在扫描行之间都有编码隔断标志。但是,在一个扫描行中的色彩平面间没有编码隔断标志。同样,也没有分隔符可用来标识扫描行的结束(虽然一个扫描行可能是也可能不是用额外的零作为结束)。也就是说,在扫描行之间不会有行号(虽然这里写出来了),也不会有空字符、空格、回车、换行或其他的字符。<BR>不论要记录的是何种类型的位图数据,都使用同样的运行长度压缩方法,下面给出恢复算法(当前普遍使用的基于调色板的图像只有一个平面)。<BR>这里,请您先学习教程,具体了解PCX文件格式,然后来看一下下面这个——例程中由Gif文件转换PCX文件的程序中是如何编写PCX文件头:<BR>WritePcxHeader(FILE 
*fp,char *palette )<BR>{kk1}<BR>PCXHEAD h;<BR><BR>memset((char 
*)&amp;h,0,sizeof(PCXHEAD));<BR>h.manufacturer = 0x0a;<BR>h.version = 
5;<BR>h.encoding = 1;<BR>h.xmin = h.ymin = 0;<BR>h.xmax = width - 1;<BR>h.ymax = 
depth - 1;<BR>h.hres = h.vres = 0;<BR>h.palette_type = 1;&nbsp;<BR>if( 
BitsPerPixel &lt; 5 ) {kk1}<BR>h.bits_per_pixel = 1;<BR>h.colour_planes = 
BitsPerPixel;<BR>h.bytes_per_line = 
pixels2bytes(width);<BR>memcpy(h.palette,palette,(1&lt;&lt;BitsPerPixel)*3);<BR>}<BR>else 
if (BitsPerPixel == 8) {kk1}<BR>h.bits_per_pixel = 8;<BR>h.colour_planes = 
1;<BR>h.bytes_per_line = width;<BR>}<BR>else {kk1}<BR>h.bits_per_pixel = 
8;<BR>h.colour_planes = 1;<BR>h.bytes_per_line = width;<BR>}<BR>fwrite( (char 
*)&amp;h,1,sizeof(PCXHEAD),fp );&nbsp;<BR>}<BR><BR>1、优点 
TIF格式的优点主要是适合于广泛的应用程序,它与电脑结构、操作系统和图形处理的硬件无关,它可以处理黑白和灰度图形,允许使用者针对一个扫描器、监视器和打印机的特殊佳能而进行调整。TIF具有防止错误发生的格式,因此,对于媒体之间的数据交换, 
TIF常常是位元映射的最佳选择之一。<BR>2、缺点 TIF有一个主要的缺点,就是需要花费大量的程序设计工作来进行图形翻译,例如, 
TIF数据可以用几种不同的方法压缩。为了达到覆盖面更广,一个TIF读取程序必须具有支持这些不同压缩方法的功能。<BR>3、变体 
TIF有许多的变体,所以要使数据交换可行,程序设计师要努力使得TIF读取程序可以翻译TIF的各种特性。TlF文件、读取程序和写入程序是根据不问的光度(彩色或灰度)和数据压缩方法而变化的。TIF 
5.0定义了四个测光度的TIF级别: TIF-B为色, TIF-G为灰度, 
TIF-P为基于调色板的彩色,而TIF-K为RGB彩色。&nbsp;<BR>在这些级别中,象点数据可以用六种压缩格式的任何一种储存,压缩格式通常由一个编号区别,如下所示:<BR>#1 
无压缩<BR>#2 CCITTGroup 3,改进的霍夫曼运行长度编码(MOdifed Huffman Run Length Encoding)<BR>#3 
传真机相容使用的CCITT Group 3<BR>#4 传真机相容使用的CCITT Group 4<BR>#5 LZW 
(Lempel-Ziv&amp;Welch)压缩<BR>#32773 PackBits 
(Macintosh)<BR>1988年8月发行的TIF5.0版本,又增加一些新格式:<BR>#32766 2位元的NeXT RLE(Run Length 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -