基于mfc的图片浏览器的设计与实现精品推荐免费分享!!内容摘要:

XPelsPerMeter。 //位图水平分辨率,每米像素数 LONG biYPelsPerMeter。 //位图垂直分辨率,每米像素数 DWORD biClrUsed。 //位图实际使用的颜色表中的颜色数 DWORD biClrImportant。 //位图显示过程中重要的颜色数 } BITMAPINFOHEADER。 3. 颜色表 颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD 类型的结构,且定义一种颜色,定义如下: typedef struct tagRGBQUAD { BYTE rgbBlue。 //蓝色的亮度(值范围为 0~ 255) BYTE rgbGreen。 //绿色的亮度(值范围为 0~ 255) BYTE rgbRed。 //红色的亮度(值范围为 0~ 255) BYTE rgbReserved。 //保留,必须为 0 } RGBQUAD。 位图信息头和颜色表组成位图信息, BITMAPINFO 结构定义如下: typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader。 RGBQUAD bmiColors[i]。 } BITMAPINFO。 颜色表中 RGBQUAD结构数据的个数由 biBitCount来确定,当 biBitCount= 8 时,分别有 1 256 个表项;当 biBitCount=24 时,没有颜色表项。 位图数据记录了位图的每一个像素值,记录顺序是在扫描行内从左到右、扫描行之间从下到上。 位图的一个像素值所占的字节数如下:  当 biBitCount=1 时, 8 个像素占 1 个字节。  当 biBitCount=4 时, 2 个像素占 1 个字节。  当 biBitCount=8 时, 1 个像素占 1 个字节。  当 biBitCount=24 时, 1 个像素占 3 个字节。 Windows 规定一个扫描行所占的字节数必须是 4 的倍数(即以 long 为单位),不足的以 0 填充,一个扫描行所占的字节数计算方法如下: DataSizePerLine=(biWidth biBitCount+31)/8 这是本设计中的一个关键点,无论对图像进行何种变换,都要进行扫描行的4 字节对齐。 除了上述的 Windows BMP 以外,还有一种与其结构相似,但不完全相同的另一种 BMP 图 像,即 OS/2 采用的 BMP。 其与 Windows BMP 的主要区别是位图信息结构(信息头结构和颜色表结构)不同。 而它们的图像位数据的存储方式是完全一样的。 本设计只讨论 Windows 系统下的 BMP 图像,故对 OS/2 使用的BMP 不进行详细分析。 PCX图像 PCX 是 Zsoft 公司研制的一种常用图像格式,也是在 PC 机上使用时间最久的一种位图格式。 PCX 的最新版本支持 24 位色彩( 256 色的调色板或全 24 位RGB),图像的大小可达 64k 64k 个像素。 PCX 采用游程长度编码来压缩数据,但是有些情况下压缩效率不 高,尤其是对于扫描图像或视频图像。 PCX 存在许多的版本,其文件头中的一个代码标识了文件所支持的 Zsoft 产品版本,不同版本的图像特点如表 所示。 表 不同 PCX版本的图像特点 版本号 图像特点 0 基本的单色( 2 色)或 4 色图像 1 基本的单色( 2 色)或 4 色图像,另加 16 位色图像 2 基本的单色( 2 色)或 4 色图像,另加 24 位调色板的 256 色以及全 24 位 RGB 色图像 3 基本的单色( 2 色)或 4 色图像, 4 基本的单色( 2 色)或 4 色图像 5 基本的单色( 2 色)或 4 色、 256 色图像以及多平面 真彩色图像 1. 文件结构及文件头 PCX 图像由 3 个部分组成,即文件头、位图数据和一个多达 256 种色彩的调色板。 PCX 文件的文件头为固定的 128 字节。 其中包含版本号、被打印或扫描图像的分辨率(单位为每英寸点数)、大小(单位为像素数)、每扫描行字节数、每像素位数和彩色平面数等信息。 文件还可能包括一个调色板以及表明该调色板是灰度还是彩色的一个代码。 文件的核心部分是位图数据。 位图数据以类似于Packbits 压缩法的游程长度压缩形式记录,像素值通常是单字节的索引值,指向调色板中的位置。 如果版本号为 5,则文件末尾处 还有一个单一的位平面和一个RGB 值的 256 色调色板, 3 种原色各占 1 个字节。 PCX 格式图像的文件头结构如表 所示。 表 PCX文件头结构 起始字节 字节数 内容 解释 0 1 Zsoft 标志 10( 0x0a), Zsoft PCX 文件的标志 1 1 版本号 0: PC Paintbrush 1: PC Paintbrush ,带调色板 2 1 编码 1: PCX 游程长度编码 3 1 位 /像素 每个平面的位 /像素值,可能值为 2,、 4 或 8 4 8 图像大小 图像边界极限为 Xmin、 Ymin、 Xmax、 Ymax,以像素为单位 12 2 水平分辨率 打印时, X 方向的每英寸点数 14 2 垂直分辨率 打印时, Y 方向的每英寸点数 16 48 文件头调色板 16 色的“ EGA/VGA”头调色板 64 1 保留字节 Zsoft 保留,为 0 65 1 平面 彩色 /灰度平面数。 PCX 图像可以是单彩色,也可以具有多个彩色平面 66 2 每行字节数 每个色彩平面的每行字节数,即存储未压缩图像的一个扫描行所需的字节数,总是偶数 68 2 调色板解释 1:彩色或黑白 2:灰度 70 2 视频屏 幕大小 X 视频输出的水平像素数 1 72 2 视频屏幕大小 Y 视频输出的垂直像素数 1 74 54 全空直到文件结束 0 2. 对 PCX进行解码的关键 因为在一个 PCX 文件中可以用到几种不同的记录方法,因此其中必须包含所用方法的标志。 在对 PCX 进行解释时,单靠读取版本号是不够的,最可靠的标志是每像素的位数(文件头的第 3 个字节)和色彩平面数(文件头的第 65 个字节),这两个标志与图像色彩数的对应关系如表 所示。 表 PCX数据的解释 每像素的位数 色彩平面数 解释 1 1 单色 1 2 4 色 1 3 8 色 1 4 16 色 2 1 4 色 2 4 16 色 4 1 16 色 8 1 256 色 8 3 兆色 平面数说明是否使用了调色板。 多于一个平面则没有调色板。 如果使用了调色板,则可以由版本号和每像素位数决定 PCX 图像所使用的调色板类型。 3. PCX图像数据的存储 如果没有使用调色板,则数据是实际的像素值;否则是调色板表项的索引值。 当是实际的像素值时,它们按色彩平面和扫描行存储。 其存储格式为: 第 0行 RRRRRR„ GGGGGG„ BBBBBB„ 第 1行 RRRRRR„ GGGGGG„ BBBBBB„ ┇ ┇ 第 n行 RRRRRR„ GGGGGG„ BBBBBB„ 如果有两个平面,那么色彩是任选的;如果有 3 个平面,其颜色为 RGB;如果有 4 个平面,则颜色信息包含 RGB 和光强。 光强位只是给像素一种名义上的较高亮度。 当使用调色板时,数据指调色板的索引值,它们构成一个完整的图像平面,即不会被分解为单独的色彩平面。 数据将按如下的简单方式排列( i 是调色板中的索引值): 第 0行 iiiiiiiiiiiii„ 第 1行 iiiiiiiiiiiii„ ┇ ┇ 第 n行 iiiiiiiiiiiii„ i 的长度取决于每像素的位数,如每像素位数为 4,则 i 就是半个字节长。 PCX 的编码是以最大 64 个重复单元为一组进行压缩的,不论要记录的是何种类型的数据,都使用同样的游程长度压缩算法。 在扫描行中有编码间隔标志,但是,在一个扫描行中的色彩平面之间没有间隔标志。 同样,也没有分隔符来标识一个扫描行结束。 4. PCX图像的调色板 任何 PCX 文件,如果像素位数超过 1 但又只有一个色彩平面,则都需要使用调色板。 PCX 图像由 3 种不同的调色板实现。 版本代码为 5 的文件最容易确认。 如果有一个色彩平面,则它们会在文件结尾处使 用 256 色的“ VGA”调色板。 其他的基于调色板的文件均使用头调色板,而头调色板又有两种可能的实现,即 EGA 和 CGA。 三种不同的调色板介绍如下。 ( 1)位于文件末尾的 256 色“ VGA”调色板 256 色的调色板从文件末尾( EOF)前 768 个字节开始,而且以十进制码 12(十六进制 0C)开始( 768= 256 1 字节 3,每个 R、 G 和 B 都是 1 个字节)。 因此,值为 n 的像素指向调色板中的“ EOF768+ 3 n”处;后面 3 个字节分别为该像素红、绿、蓝的值。 ( 2) 16 色的“ EGA/VGA”头调色板 头调色板位于第 16~第 63 字节,共 48 个字节,数据按 3 元组组织,具有16 组 3 字节数据,每个字节分别对应 R、 G 和 B。 对于为 EGA 建立的文件,每种原色只可以有 4 级,所以每个字节提供的 256 个值的范围被分成 4 个区域。 每个区域与相应的级相对应: 063 对应第 0 级、 64~ 127 对应第 1 级、 128~ 192 对应第 2 级、 193~ 254 对应第 3 级。 ( 3)“ CGA”调色板 这种调色板现已过时,在 PCX 的版本 5 及更高的版本中不再使用。 这中方法只需要字节 16 和字节 19 的最高位数据。 另外,版本 5 或更高版本的 PCX 文件能够支持 24 位真彩色的 PCX 文件,其 色彩平面为 3 个位平面。 TGA图像 TGA 格式是 Truevision 公司设计并负责解释的图像格式。 TGA 也包含了多种变体, TGA 文件的第三个字节用来区别不是 TGA 的文件。 该字节的值(二进制整数)及对应的文件类型如下。  0:文件中没有图像数据。  1:未压缩的,颜色表图像。  2:未压缩的, RGB 图像。  3:未压缩的,黑白图像。  9:游程长度( Runlength)编码的颜色表图像。  10:游程长度( Runlength)编码的 RGB 图像。  11:压缩的,黑白图像。  32:使用 Huffman、 Delta 和 Runlength 编码的颜色表图像。  33:使用 Huffman、 Delta 和 Runlength 编码的颜色映射图像,四叉树类型处理 1. 数据类型 1:未压缩的颜色表( colormapped)图像 TGA 未压缩颜色表图像格式的说明如表 所示。 表 TGA未压缩颜色表图像格式说明 偏移(字节) 长度(字节) 描述 0 1 图像信息字段(见本子表的后面)的字符数。 本字段是 1 字节无符号整型,指出了图像格式区别字段长度,其取值范围是 0 到 255,当它为 0 时表示没有图像的信息字段 1 1 颜色表的类型。 该 字段为表示对应格式 1 的图像而包含一个二进制 1 2 1 图像类型码。 该字段总为 1,这也是此类型为格式 1 的原因 3 5 颜色表规格,颜色表首址 3 2 颜色表首元表项的整型(低位 高位)索引 5 2 颜色表的长度。 颜色表的表项总数,整型(低位 高位) 7 1 颜色表表项的位( bit)数。 16 代表 16 位 TGA、 24 代表 24 位 TGA、32 代表 32 位 TGA 8 10 图像规格 8 2 图像 X 坐标的起始位置。 图像左下角 X 坐标的整型(低位 高位)值 10 2 图像 Y 坐标的起始位置。 图像左下角 Y 坐标的整型( 低位 高位)值 12 2 图像宽度。 以像素为单位,图像宽度的整型(低位 高位)值 14 2 图像高度。 以像素为单位,图像高度的整型(低位 高位)值 16 1 图像每像素存储占用位( bit)数 17 1 图像描述符字节 bits 3~0:每像素的属性位( bit)数 bit 4:保留,必须为 0 bit 5:屏幕起始位置标志 0:原点在左下角 1:原点在左上角 Truevision 图像必须为 0 bits 7~6:交叉数据存储标志 00:无交叉 01:两路奇 /偶交叉 10:四路交叉 11:保留 18 可变 图像信息字段。 包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的值。 它常常被忽略(即偏移 0 处值为 0),其最大可以含有 255个字符。 如果需要存储更多信息,可以放在图像数据之后 (续表) 偏移(字节) 长度(字节) 描述 可变 可变 颜色表数据。 起始位置由前一个字段的大小决定;其长度由单项数据大小和数据项数目决定(在前面相应的说明字段中给出),每项是 2 字节、 3 字节或 4 字节,字节中没有使用的位( bit)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。