文章摘要:
微软的最新的操作系统WindowsXP对位图的运用更是精妙绝伦... ...好了我们现在先
放下位图原理运用方面多姿多彩的变化,来研究下最基本的Windows画笔产生的画图编码
以及画图产生的原理。以下分析都是针对Windows画笔画产生的24位真彩色位图格式。
----------------------------------------------------------------------------
----
正文:
位图格式、编码与显象原理
Windows已经把位图技术深入运用在系统的各个方面。比如在Windows中,你在记事本,
写子板里打出来的字实际上是利用位画原理"画"出来的。许多Windows可执行程序有美丽
的图标,其实它是将位图技术嵌入可执行文件EXE中。图标也是利用位图原理构造的,微
软的最新的操作系统WindowsXP对位图的运用更是精妙绝伦... ...好了我们现在先放下
位图原理运用方面多姿多彩的变化,来研究下最基本的Windows画笔产生的画图编码以及
画图产生的原理。以下分析都是针对Windows画笔画产生的24位真彩色位图格式。
下面我们将解析一幅位图的十六进制代码来介绍位图的格式。在Windows画笔中创建一幅
24位真彩色的位图,将其高设为10象素,宽为5象素小位图,用红色填充,然后将其保存
到磁盘上。最后用16进制编程器打开,可以看到以下位图的十六进制格式:
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00000000 42 4D D6 00 00 00 00 00 00 00 36 00 00 00 28 00 BM?......6...(.
00000016 00 00 0A 00 00 00 05 00 00 00 01 00 18 00 00 00 ................
00000032 00 00 A0 00 00 00 C4 0E 00 00 C4 0E 00 00 00 00 ..?..?..?....
00000048 00 00 00 00 00 00 00 00 FF 00 00 FF 00 00 FF 00 ........?..?..?.
00000064 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 ?..?..?..?..?..
00000080 FF 00 00 FF 00 00 00 00 FF 00 00 FF 00 00 FF 00 ..?....?..?..?.
00000096 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 ?..?..?..?..?..
00000112 FF 00 00 FF 00 00 00 00 FF 00 00 FF 00 00 FF 00 ..?....?..?..?.
00000128 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 ?..?..?..?..?..
00000144 FF 00 00 FF 00 00 00 00 FF 00 00 FF 00 00 FF 00 ..?....?..?..?.
00000160 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 ?..?..?..?..?..
00000176 FF 00 00 FF 00 00 00 00 FF 00 00 FF 00 00 FF 00 ..?....?..?..?.
00000192 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 ?..?..?..?..?..
00000208 FF 00 00 FF 00 00 ?..?..
以上即基本的一幅真彩色24位宽10象素高5象素的位图的十六进制格式。我们可以把一幅
位图分为三部分来研究:位图文件头,位图信息头和位图阵列表。
一、位图文件头:
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00000000 42 4D D6 00 00 00 00 00 00 00 36 00 00 00 BM?......6...
分析:位图文件头,记录标志文件大小等一些信息。
42 4D 为位图的标志,即ASCII码为BM。
D6 00 表示位图的文件的总字节数。换算成十进制为15054字节,即这幅画的大小为150
54字节。
00 00 00 00 00 00 该几个字节为保留字节。
36 00 00 00 表示位图阵列的起始位置。36H=54即54字节开始为位图阵列。
二、位图信息头:
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00000000 28 00 (.
00000016 00 00 0A 00 00 00 05 00 00 00 01 00 18 00 00 00 ................
00000032 00 00 A0 00 00 00 C4 0E 00 00 C4 0E 00 00 00 00 ..?..?..?....
00000048 00 00 00 00 00 00 .......
分析:位图信息头,记录着和位图相关的一些信息。如位图长、宽、高等。
28 00 00 00 位图信息头的长度。28H=40,即位图信息头占用40个字节。
0A 00 00 00 位图宽度。我们建立的位图是10个象素所以这里为0AH。
05 00 00 00 位图高度 。刚好等于我们建立位图时设置的5个象素宽的值。
10 00 位图设备级别。
18 00 位图级别00 18H=24即24位真彩色。
00 00 00 00 压缩类型 为0代理不压缩。
A0 00 00 00 位图大小。A0=160 ,代表下面的图阵列表为160个字节
C4 0E 00 00 水平分辨率。
C4 0E 00 00 垂真分辨率。
00 00 00 00 位图实际使用的颜色表中的颜色变址数。
00 00 00 00 位图显示过程中被认为重要颜色变址数。
三、位图阵列表
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00000048 00 00 FF 00 00 FF 00 00 FF 00 .?..?..?.
00000064 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 ?..?..?..?..?..
00000080 FF 00 00 FF 00 00 00 00 FF 00 00 FF 00 00 FF 00 ..?....?..?..?.
00000096 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 ?..?..?..?..?..
00000112 FF 00 00 FF 00 00 00 00 FF 00 00 FF 00 00 FF 00 ..?....?..?..?.
00000128 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 ?..?..?..?..?..
00000144 FF 00 00 FF 00 00 00 00 FF 00 00 FF 00 00 FF 00 ..?....?..?..?.
00000160 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 ?..?..?..?..?..
00000176 FF 00 00 FF 00 00 00 00 FF 00 00 FF 00 00 FF 00 ..?....?..?..?.
00000192 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 FF 00 00 ?..?..?..?..?..
00000208 FF 00 00 FF 00 00 ?..?..
分析:该区域均为位图阵列表。
在24位位图阵列中,每三个字节代表画笔上的一个象素,这三个字节从左到右分别代表
蓝、绿、红,所以00 00 FF代表一个红色的象素。在位图阵列中就记载了位图显示的位
置和颜色这两个要素。在此例中地址为48开始的三个字节00 00 FF在画笔中呈出来的是
左下角的最左边的一个点。虽然和实际上的位图有所不同但它是按一定规律的。
核心成象原理:
在24位位图阵列表中,每三个字节产生屏幕上的一个象素,每个字节分别控制着蓝、绿
、红三个电子枪的发光强度。我们知道在显示器内部有三个电子枪,如果这三个电子枪
都不发光的情况下这时屏幕上就显示为黑色,此时这三个字节就应该为00 00 00;如果
三个电子枪都各自发最强的光,即产生最强的蓝、绿、红三种光混合在一起就是白色,
这时位图阵列表的三个字节为FF FF FF;如果只是其中的一个电子枪发光则产生的光就
是蓝、绿、红中的其中的一种;如果系统需要其它颜色的话就可能两个或者三个电子枪
都产生强弱不同的光线来组合成其它颜色。在位图阵列表中的这三个字节只是告诉电子
枪要发光的强弱,00代最不发光,FF代表发该电子枪最强的光,这就是为什么这么一段
位图阵列表为什么能够在画笔中呈现出多彩的颜色的基本原理。
以上仅对Windows画笔产生的24位真彩色位图的一个例子来解析位图格式。在VC中的win
gdi.h中对于位图的编码和格式有更加详细的定义,下面给出24位真彩位图格式在VC中的
定义。
typedef struct tagBITMAPFILEHEADER { //位图文件头
WORD bfType; //位图标志"BM"
DWORD bfSize; //位图文件总字节数
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{ //位图信息头格式的定义
DWORD biSize; //位图住息头占用字节数
LONG biWidth; //位图呈象宽度
LONG biHeight; //位图呈象高度
WORD biPlanes; //位图设备级别
WORD biBitCount; //位图级别设定
DWORD biCompression; //压缩类型
DWORD biSizeImage; //位图阵列表字节数
LONG biXPelsPerMeter; //水平分辨率
LONG biYPelsPerMeter; //垂真分辨率
DWORD biClrUsed; //位图实际使用的颜色表中的颜色变址数
DWORD biClrImportant; //位图显示过程中被认为重要颜色变址数
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
typedef struct tagRGBTRIPLE { //位图阵列格式定义
BYTE rgbtBlue; //定义蓝色
BYTE rgbtGreen; //定义绿色
BYTE rgbtRed; //定义红色
} RGBTRIPLE; //构成一个3字节的RGBTRIPLE
好了,你现在已经弄懂了24位真彩色位图格式,编码和产生的原理,我想至于图标、以
及jpg等这些文件的探索大家应该能够举一反三,其原理也是24位真彩色位图原理基本一
样,只是其中对其中增压缩算法等一些技术在里面。
分享到:
相关推荐
Oracle 数据库的位图索引原理与应用 Oracle 数据库中的位图索引是一种特殊类型的索引,主要用于解决查询优化问题。 在实际应用中,列值重复率高的情况非常常见,使用 B 树索引效果不佳。在这种情况下,位图索引就成...
DDB格式与特定的显示设备相关联,而DIB则可以跨不同的显示设备保持一致的显示效果。 BMP文件的结构由四个主要部分组成: 1. **位图文件头(BITMAPFILEHEADER, bmfh)**:这是文件的起始部分,包含2字节的文件...
第二次,将掩码位图与目标设备上下文“与”运算,这样源位图的透明区域将不会覆盖背景。 通过这样的处理,我们可以在任何背景下正确地显示带有透明区域的位图。例如,如果我们有一个背景位图`bk.bmp`和一个带有蓝色...
24位图存放格式详细说明 本文将详细介绍 24 位图存放格式的结构定义、文件头结构定义、位图信息头结构定义和位图数据阵列等知识点。 1. 文件头结构定义 BITMAPFILEHEADER 结构体用于定义位图文件的头部信息,共 ...
用C++开发位图格式图像应用程序
图像处理\用Visual C++显示位图 的原理与方法.pdf
用C++开发位图格式图像应用程序(2) 全文
简洁明了的介绍了BMP位图格式,以及获取不同位图颜色分量的方式。
VB位图转换JPG格式模块源码,VB位图转换JPG格式保存到本地磁盘
平台:DEV-C++ 5.8.3 语言:C++ 功能: 1)1、4、8(灰度、色彩)、16(565、555)、24、32位位图之间的相互转化。...读入位图数据,转换位图格式。 3)将图片转化为单片机开发能用到的液晶坐标文件。
BMP位图读写的格式与方法 BMP位图读写的格式与方法是计算机图形学和图像处理领域中的重要知识点。BMP位图是一种位图文件格式,广泛应用于图像处理、计算机图形学、移动设备等领域。了解BMP位图的读写格式与方法对于...
1:BMP由四部分组成:BMP文件头(14字节)、位图信息头(40字节)、颜色表、位图数据。 2:BMP文件头(14字节) BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。 其结构定义如下: typedef ...
6. **位图句柄取数据**:从位图句柄中提取位图的实际像素数据,这些数据通常以二进制格式存储,包括位图的颜色信息、宽度、高度等。 7. **数据取位图句柄**:将位图数据转换回位图句柄,方便在系统中进行显示或其他...
**BMP位图显示原理详解** BMP(Bitmap)是一种常见的图像文件格式,广泛应用于Windows操作系统及许多其他软件中。这种格式存储了像素数据,使得计算机可以将其转换为屏幕上可见的图像。理解BMP位图的显示原理对于...
位图与调色板是计算机图形学中的两个关键概念,特别是在图像处理和显示技术中扮演着重要角色。位图,也称为栅格图像,是由像素阵列构成的,每个像素代表图像上的一个颜色点。调色板则在位图中用于存储和管理颜色,...
在Windows系统中,BMP(Bitmap)文件是最基础的位图格式,它的数据结构直观且易于处理。 1. 位图文件的读取:位图文件通常由文件头、信息头和像素数据三部分组成。文件头包含文件的基本信息,如文件类型、大小等;...
方块编码是一种图像压缩技术,尤其适用于有限颜色空间的位图图像,如256色图像。这种技术通过将图像...通过理解这种编码方法的工作原理以及如何在实践中应用,开发者可以进一步探索图像处理和压缩领域的更多可能性。
BMP位图图像格式简介 BMP位图图像格式是一种常用的图像文件格式,它由四个部分组成:位图文件头、位图信息头、彩色表和图象数据阵列。下面是对BMP位图图像格式的详细介绍: 位图文件头(Bitmap File Header) ...
用Visual C++显示位图的原理与方法 <<电脑编程技巧与维护 >>2001年01期 王丰 <br>一、介绍 在VC++环境下显示位图并不是什么新技术,但本文仍然在此"老调重弹"的原因是:(1)这一技术十分重要,它是图像编程的...
在图像处理领域,位图(Bitmap)是一种常见的图像文件格式,它存储了图像的像素颜色信息。24位位图和16位位图是两种不同的位深度表示,位深度决定了一个像素可以表示的颜色数量。24位位图通常包含三个颜色通道(红、...