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

📄 base4.htm

📁 C++Builder教学大全
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>图形文件的格式</title>
<meta name="Microsoft Border" content="none">
</head>

<body>

<h1 style="margin-top: 0; margin-bottom: 0" align="left">&nbsp;&nbsp;&nbsp;     
图形文件的格式</h1> 
<p style="margin-top: 0; margin-bottom: 0" align="left"></p> 
<p style="margin-top: 0; margin-bottom: 0" align="left"><a href="index.htm">[    
主页 ]</a>&nbsp;&nbsp; <a href="base.htm">[上一层]</a></p>   
<hr align="left"> 
<p align="left">&nbsp;&nbsp;&nbsp;    
近年来,个人计算机和工作站上的图形工具比几年前的巨型机上的图形工具还要多,计算机图形学的领域也随之扩展。过去,当人们编出越来越多的图形应用程序后,需要把图像文件存储下来以作日后的处理或显示之用。在缺乏广为接受的标准的情况下,    
每个应用程序开发者都提出文件格式以支持其应用程序。从八十年代初以后,官方的边准组织开始提出首批通用的图形子程序和图形文件,以促成文件代码在不同的应用程序和硬件上的可移植性。<br> 
随之而来的结果试图性格是数量的急剧膨胀,在数以百计的应用程序中所使用的格式由几十种之多。例如在著名的图形处理软件——PhotoShop    
5.0中用到的图像文件格式、子格式就共有三十多种。<br> 
简单举几种格式来说:PCX、MacPaint、Tiff、Gif、GEM、IFF/ILBM、Targa、BMP/DIB、WPG、PostScript、Sun、PBM、XBM、JPEG、FITS、DXF、HP-GL、LotusPic、PCL、WMF、EPS、CGM、RIB、FLI/FLC、MPEG、PDF……。对于如此繁杂的文件格式,我们每不可能接触或掌握全部的格式。在本章中,我们对最常用的文件格式进行分类归档,对读者作以详细的介绍。下面让我们先来看一下最常见的文件格式——BMP文件。<br> 
<br> 
1.优点 在Microsoft Windows下得到广泛使用,支持稀疏的位元映射。<br>   
2.缺点 除了Microsoft Windows外,无法在其他环境下使用。<br>   
3.变体 Windows 3.0还可以从OS/2 Presentation Manager l.x中读取BMP文件。<br>   
4.综述 BMP格式又称为DIB,也就是Microsoft Windows设备无关位元映射(Microsoft    
Device Independent Bitmap)文件,Bmp可以包含每个象点l位元、4位元、8位元或24位元的图形。其中1、4和8位元图形有彩色映像,而24位元图形则是全彩(TrueColor)。<br>   
<br> 
一、文件头<br> 
所有的DIB文件含有一个共同的文件头。<br> 
bfOffBits字段含有从文件头的最后(字节14)到图像数据位开始之间的字节数,这样就能方便地跳过位图头。<br> 
文件位图格式的两种变体可以通过查看位图头的第一个字(文件偏移字节14)来区分如果该字为12,则是一个os/2    
格式文件,如果为40,则是Windows 3.x格式文件。<br>   
二、Windows的位图头<br> 
文件图后面为位图头和可选的彩色图像。位图头的结构有时称作BITMAPINFO,而带有色彩对应表的则为BITMAPINFOHEADER。<br> 
三、色彩对应表<br> 
使用每个像素1、4或8位的图像必然有一个色彩对应表。彩色映像的大小一般为2、16或256个表项,但如果图像不需要一个色彩全集,则表项可以更少些。如果biClrUsed字段为非零,则它包含使用的色彩数目,同时它也是色彩对应表的表项数目。如果字段为0,则色彩对应表为全部大小。24位图像没有色彩对应表,这种图像是直接RGB色彩。biClrUsed字段可以是非零,以提供一个建议的色彩大小。<br> 
由于显示设备可能不具备图像所需的那么多色彩,因此色彩对应表中的表项应该让最重要的色彩排列在先。    
biClrImportant字段如果不为零,则指出了对于重新生成好的图像而言,有多少种颜色是重要的。<br> 
色彩对应表每个表项都有四个字节。<br> 
四、Windows的位图数据<br> 
位图数据紧跟在色彩对应表的后面。数据可以是不压缩的,如果要压缩,则4位和8位的图像可以使用一种RLE压缩方法。<br> 
位从逻辑角度看是每次存入一行(没有压缩时从物理角度看也是如此),每行被填充到一个四字节边界。每个像素一位的位图<br> 
每个像素只有一位,每字节有8个像素。字节中的最高位对应于最左边的像素。每个像素四位的位图,没有压缩的图像是每个字节有两个像素,高四位为最左边的像素,且每行填充到一个四字节边界。<br> 
压缩过的图像使用一种RLE编码格式,由一系列组组成。有三种类型的组:重复组、文字组和特殊组。<br> 
重复组由两个字节组成。第一个字节是像素计数值,第两个字节是一对象素,该组用第一个字节表示像素数,第两个字节为2个像素。例如,十六进制字节:05    
24表示像素2 4 2 4 2<br>   
文字由一个零字节、一个像素值字节和文字像素字节组成。像素计数值必须至少为3(只有一个或两个像素时可以用重复组编码)。文字像素用0填充到一个偶数值。<br> 
例如,十六进制字节:<br> 
0005 1234 5000(注意填充到偶数字节)<br>   
表示像素 1 2 3 4 5<br>   
特殊序列00 00表示一行的结束,特殊序列00 01表示位图的结束,特殊序列00    
02 xx yy是一个位置增量,说明把图像向右走xx个像素和向下走yy个像素。每个像素8位的位图<br>   
没有压缩的图像为一个字节一个像素,每行填充到四字节边界。压缩过的图像使用RLE编码格式,后者由一系列的组组成。组有三种类型:重复组、文字组和特殊组。重复组由两个字节组成,第一个字节为像素计数值,第两个字节为像素值。例如,十六进制字节:05    
24表示像素 24 24 24 24 24。文字组由一个零字节、一个像素计数值字节和文字像素字节组成。像素计数值必须至少是3。文字像素用0填充到偶数字节数。<br>   
例如,十六进制字节:<br> 
0005 1234 5678 9A00(注意填充到偶数字节)表示像素 12 34 56 78 9A特殊序列与四位的位图一样。每个像素二十四位的位图。每个像素为3个字节,顺序依次为红、绿和蓝的值。每行用0填充到四字节的边界。<br>   
以上我们介绍了bmp文件的格式,下面我们看一下如何用C++语言来实现bmp文件的读取,下面是例程bmpread中的DisplayBitmap函数:<br> 
BOOL CMainWindow::DisplayBitmap(HDC hDC, HBITMAP hBitmap,<br>   
int X, int Y, DWORD RopCode)<br>   
{kk1}<br> 
// Create compatible display context<br>   
HDC hCompatDC = CreateCompatibleDC(hDC);<br>   
<br> 
// Select bitmap into compatible display context<br>   
HBITMAP hOldBitmap = SelectBitmap(hCompatDC, hBitmap);<br>   
<br> 
<br> 
// Get dimensions of bitmap<br>   
BITMAP BM;<br>   
GetObject(hBitmap, sizeof(BM), &amp;BM);<br>   
<br> 
// Blast those bits to the screen<br>   
BOOL result;<br>   
result = BitBlt(hDC, X, Y, BM.bmWidth, BM.bmHeight,<br>   
hCompatDC, 0, 0, RopCode);<br>   
<br> 
// De-select the bitmap<br>   
SelectBitmap(hCompatDC, hOldBitmap);<br>   
<br> 
// Clean up after we are 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> 

⌨️ 快捷键说明

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