bmp位图调色板
位图文件(BMP)

位图⽂件(BMP)位图⽂件简介BMP(Bitmap-File)格式是最常⽤的图像⽂件存取格式之⼀,是微软为其Windows环境设置的标准图像格式,BMP位图⽂件默认的⽂件扩展名是“.BMP”或者“.bmp”,有时它也会以“.DIB”或者“RLE”为扩展名。
⽤BMP格式存放的图像⼏乎可以被所有的图像显⽰软件读取。
BMP图形⽂件是Windows采⽤的图像⽂件格式,在Windows环境下运⾏的所有图像软件都⽀持BMP图像⽂件格式。
Windows系统内部个图像绘制操作都是以BMP为基础的。
Windows3.0以前的BMP⽂件格式与显⽰设备有关,因此把这种BMP图像⽂件格式称为设备相关位图(Device Dependent Bitmap,DDB)⽂件格式。
Windows3.0以后的BMP⽂件都与显⽰设备⽆关,因此把这种BMP⽂件格式称为设备⽆关位图(Device Independent Bitmap,DIB)格式。
BMP⽂件格式摘要每个BMP⽂件只能存放⼀张图像。
图像数据是否采⽤压缩⽅式存放,取决于⽂件的⼤⼩与格式,即压缩处理是BMP图像⽂件的⼀个选项,⽤户可以根据需要进⾏选择。
其中,⾮压缩格式是BMP图像⽂件所采⽤的⼀种通⽤格式,它按照⼀定的顺序忠实的记录图像中每⼀个像素的颜⾊值。
如果⽤户确定将BMP⽂件格式压缩处理,则Windows设计了⼀种压缩⽅式:如果位图为16⾊模式,则采⽤RLE4压缩⽅式,如果图像为256⾊模式,则采⽤RLE8压缩⽅式。
BMP图像数据⽂件格式可以存储为单⾊,16⾊,256⾊和真彩⾊四种图像数据,其数据的排列顺序与⼀般⽂件不同,它以图像的左下⾓作为起点存储图像,⽽不是以图像的坐上⾓为起点。
⽽且BMP图像⽂件格式中还存在另外⼀个与众不同的特点,即其调⾊板数据所采⽤的数据结构中,红,绿,蓝三种基⾊数据的排列顺序也恰好与其他图像⽂件格式相反。
总之,BMP图像⽂件格式拥有许多适合于Windows环境的新特⾊,⽽且随着Windows版本的不断更新,微软也在不断的改进BMP图像⽂件格式。
位图和调色板

第1章Windows位图和调色板1.1 位图和调色板的概念如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS 成功的一个重要因素是它可视化的漂亮界面。
那么Windows是如何显示图象的呢?这就要谈到位图(bitmap)。
我们知道,普通的显示器屏幕是由许许多多点构成的,我们称之为象素。
显示时采用扫描的方法:电子枪每次从左到右扫描一行,为每个象素着色,然后从上到下这样扫描若干行,就扫过了一屏。
为了防止闪烁,每秒要重复上述过程几十次。
例如我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。
我们称这种显示器为位映象设备。
所谓位映象,就是指一个二维的象素矩阵,而位图就是采用位映象方法显示和存储的图象。
举个例子,图1.1是一幅普通的黑白位图,图1.2是被放大后的图,图中每个方格代表了一个象素。
我们可以看到:整个骷髅就是由这样一些黑点和白点组成的。
图1.1 骷髅图1.2 放大后的骷髅位图那么,彩色图是怎么回事呢?我们先来说说三元色RGB概念。
我们知道,自然界中的所有颜色都可以由红、绿、蓝(R,G,B)组合而成。
有的颜色含有红色成分多一些,如深红;有的含有红色成分少一些,如浅红。
针对含有红色成分的多少,可以分成0到255共256个等级,0级表示不含红色成分;255级表示含有100%的红色成分。
同样,绿色和蓝色也被分成256级。
这种分级概念称为量化。
这样,根据红、绿、蓝各种不同的组合我们就能表示出256×256×256,约1600万种颜色。
这么多颜色对于我们人眼来说已经足够丰富了。
表1.1 常见颜色的RGB组合值颜色R G B红255 0 0蓝0 255 0绿0 0 255黄255 255 0紫255 0 255青0 255 255白255 255 255黑0 0 0灰128 128 128你大概已经明白了,当一幅图中每个象素赋予不同的RGB值时,能呈现出五彩缤纷的颜色了,这样就形成了彩色图。
BMP文件调色板

一.BMP文件概述BMP文件格式,又称为位图(Bitmap)或是Device Independent Device(DIB,与设备无关位图),是Windows使用的图像文件格式,位图是一个二维的位数组,它与图像的图素一一对应。
当现实世界的图像被扫描成位图以后,图像被分割成网格,并以图素作为取样单位。
在位图中的每个图素值指明了一个单位网格内图像的平均颜色。
单色位图每个图素只需要一位,灰色或彩色位图中每个图素需要多个位。
位图代表了Windows程序内储存图像信息的两种方法之一。
储存图像信息的另一种形式是metafile, Metafile储存的就是对图像如何生成的描述,而不是将图像以数字化的图标代表。
位图有两个主要的缺点。
第一个问题是容易受设备依赖性的影响。
最明显的就是对颜色的依赖性,在单色设备上显示彩色位图的效果总是不能令人满意的。
另一个问题是位图经常暗示了特定的显示分辨率和图像纵横比,位图的第二个缺点是需要很大的储存空间。
位图除空间尺寸以外,位图还有颜色尺寸。
这里指的是每个图素所需要的位数,有时也称为位图的颜色深度(color depth)、位数(bit-count)或位/图素(bpp:bits per pixel)数。
位图中的每个图素都有相同数量的颜色,每图素1位的位图称为二阶(bilevel)、二色(bicolor)或者单色(monochrome)位图。
每图素可以是0或1,0表示黑色,1可以表示白色,但并不总是这样。
对于其它颜色,一个图素就需要有多个位。
可能的颜色值等于2位数值。
用2位可以得到4种颜色,用4位可以得16种颜色,8位可得到256种颜色,16位可得到65,536种颜色,而24位可得到16,777,216种颜色。
BMP文件的数据按照从文件头开始的先后顺序分为四个部分:bmp文件头(bmp file header):提供文件的格式、大小等信息。
位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息。
BMP图像结构

DWORD biSize; // 本结构所占用字节数(14-17字节)
LONG biWidth; // 位图的宽度,以像素为单位(18-21字节)
LONG biHeight; // 位图的高度,以像素为单位(22-25字节)
BMP图像的结构
一般的bmp文件的结结构主要包括文件头,BMP信息头,调色板,位图数据内容
(1)BMP文件头(14字节) ,文件的第0字节到第13字节为BMP图像的文件头。BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。
其结构定义如下:
BYTE rgbBlue; // 蓝色的亮度(值范围为0-255)
BYTE rgbGreen; // 绿色的亮度(值范围为0-255)
BYTE rgbRed; // 红色的亮度(值范围为0-255)
BYTE rgbReserved;// 保留,必须为0
当biBitCount=1时,8个像素占1个字节;
当biBitCount=4时,2个像素占1个字节;
当biBitCount=8时,1个像素占1个字节;
当biBitCount=24时,1个像素占3个字节;
Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充。
WORD bfReserved2; // 位图文件保留字,必须为0(8-9字节)
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图(10-13字节)
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;
(2) BMP信息头
BMP 文档

BMP格式BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。
随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。
这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点--占用磁盘空间过大。
所以,目前BMP在单机上比较流行。
目录编辑本段简介BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows 环境下运行的所有图象处理软件都支持BMP图象文件格式。
Windows系统内部各图像绘制操作都是以BMP为基础的。
Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。
Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为设备无关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。
BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE 作扩展名)。
6.1.2 文件结构位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列,它具有如下所示的形式。
位图文件的组成结构名称符号位图文件头 (bitmap-file header) BITMAPFILEHEADER bmfh位图信息头 (bitmap-information header) BITMAPINFOHEADER bmih 彩色表 (color table) RGBQUAD aColors[]图象数据阵列字节 BYTE aBitmapBits[]位图文件结构可综合在表6-01中。
位图常见的格式

位图常见的格式位图图像(BitmapImage)是一种由矢量图像转换而成的用来在计算机屏幕上显示静态图像的格式。
位图图像可以存储为不同的文件格式,其中最常见的格式包括BMP,GIF,JPEG,PCX,PNG,TIFF等。
这些文件格式有一些共同的特征,也有一些不同的特征。
BMP(bits-per-pixel)文件格式是最常见的位图图像格式。
该格式的特征是每一个像素都可以被描述为精确的位深度,即每一个像素点都可以用计算机中的位来表示。
不同的BMP文件一般有不同的位深度,如1位、4位、8位、24位等。
BMP文件格式支持多种色彩系统,如调色板(Palette)、RGB(Red、Green、Blue)等。
GIF(Graphic Interchange Format)文件格式是一种可以存储256个调色板颜色索引的图像文件格式。
GIF是一种使用LZW (Lempel-Ziv-Welch)算法进行压缩的图像文件格式,因此其文件大小一般较小,这使其在网络上传播和保存上具有优势。
GIF文件格式一般用于制作简单的动画效果,使其在网站页面上产生点缀效果。
JPEG(Joint Photographic Experts Group)文件格式是图像文件格式中最流行的一种,它可以存储将近16.7万色彩索引,它可以将一幅图像压缩到更小的文件大小,这使其在网络上传播十分方便。
JPEG文件格式可以在没有失真的情况下压缩至一半左右的图像大小,这使得它在商业上得到广泛应用。
PCX(Paintbrush eXchange)文件格式是一种常见的网络上传播的图像文件格式。
它的特征在于文件存储的是位图像素,分辨率可以达到640×480,而且可以存储256色彩索引的调色板,它支持使用调色板和RGB模式进行调色。
PNG(Portable Network Graphics)文件格式是一种新的图像文件格式,它可以支持24位位图像素,它可以完美地模拟出彩色图像。
BMP文件的读写

• lpszFilter是一个包含有通配符的以“|”字符分隔的字符 串。要注意的是, 在第一个“|”字符之前是将要显示在 文件对话框的“文件类型”列表框中的信息, 第二个
“ | ”字符和第一个“ | ”字符之间的内容为对话框的过
滤器内容。在字符串szFilter的尾部, 使用两个“|”字符
而不是一个, 表示过滤器内容结束。
StretchDIBits函数简介
• • • • • • • • • • • • hdc:指向目标设备环境的句柄。 XDest:指定目标矩形左上角位置的X轴坐标,按逻辑单位来表示坐标。 YDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。 nDestWidth:指定目标矩形的宽度。 nDestHeight:指定目标矩形的高度。 XSrc:指定DIB中源矩形(左上角)的X轴坐标,坐标以像素点表示。 YSrc:指定DIB中源矩形(左上角)的Y轴坐标,坐标以像素点表示。 nSrcWidth:按像素点指定DIB中源矩形的宽度。 nSrcHeight:按像素点指定DIB中源矩形的高度。 lpBits:指向DIB位的指针,这些位的值按字节类型数组存储。 lpBitsInfo:指向BITMAPINFO结构的指针,该结构包含有关DIB方面的信息。 iUsage:表示是否提供了BITMAPINFO结构中的成员bmiColors,如果提供了, 那么该bmiColors是否包含了明确的RGB值或索引。参数iUsage必须取下列值, 这些值的含义如下: DIB_PAL_COLOR:表示该数组包含对源设备环境的 逻辑调色板进行索引的16位索引值。 DIB_RGB_COLORS:表示该颜色表 包含原义的KGB值。 dwRop:指定源像素点、目标设备环境的当前刷子和目标像素点是如何组合形成 新的图像。 返回值:如果函数执行成功,那么返回值是拷贝的扫描线数目,如果函数执行失 败,那么返回值是GDI_ERROR。 备注:。参数iUsage一般设为DIB_RGB_COLORS。dwRop一般设为SRCCOPY 。
BMP的颜色位深说明

BMP的颜色位深说明今天同事遇到一个问题,由于客户要求的图片一定是BMP R5 G6 B5模式,可是存出来的这种图片格式,在PC机上显示时,会有如下问题:第一,几乎是所有图片预览工具都看不到,第二,用画图工具打开的时候,发现首尾的顺序不对,本属于左边的一块区域被填充到了右边,而在PS里打开就很正常。
这使我有点困惑了,为什么会出现这种现像?R5 G6 B5到底又是一种什么格式呢?查过资料之后,我终于明白,原来是这样的:BMP取自位图BitMaP的缩写,也称为DIB(与设备无关的位图)是微软视窗图形子系统(GDI)内部使用的一种位图图形格式,它是微软视窗平台上的一个简单的图形文件格式。
我们知道,BMP根据颜色深度,可以分为2(1位)、16(4位)、256(8位)、65536(16位)和1670万(24位)以及32位含有alpha通道。
8位图像可以是索引彩色图像外,也可以是灰阶图像,而索引彩色图片所使用的颜色来源就是RGB颜色值。
图像上的每个点阵都是由这些调色板上的RGB值混合而来,由于这个源因,从16位开始,对于调色的板的定义就有多种模式:X1 R5 G5 B5是PC操作系统默认的16位BMP颜色位深分配格式,使用的是标准的RGB 颜色,其中X1代表1位的黑白值(或者未使用),R5代表红色位深为5位,G5代表绿色位深为5位,B5代表了蓝色位深为5位。
四个值相加刚好是16位;R5 G6 B5,电子产品中较为常用的图像模式,这种模式是红色R位深为5位,G5代表绿色G位深为6位,B5代表了蓝色B位深为5位。
三个值相加刚好是16位;这种模式常和翻转序列配合使用。
A1 R5 G5 B5,这种图像模式暂时未知主要应用于哪里。
模式是A1代表1位的alpha透明通道,R5代表红色位深为5位,G5代表绿色位深为5位,B5代表了蓝色位深为5位。
四个值相加刚好是16位;16位椐我的了解好像是没有透明通道的,为什么会有这种格式,我也不太清楚,而且这种模式在PS里一直都是打灰的,没见可以使用过,这里记录一下,有知道的朋友,我们可以一起探讨。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
调色板调色板概述每个应用程序都有自己的调色板,使用调色板时要先向系统申请,调色板分为前台调色板和后台调色板,windows为优先级高的程序分配前台调色板.我们经常会发现当启动一个大一点的程序时,桌面和其他应用程序的颜色变得粗糙起来,就是因为其他应用程序的调色板正在转为后台调色板.Windows系统内部保留了一个20种颜色的调色板,用来显示窗口,菜单等通用界面每个设备上下文都拥有一个逻辑调色板,如果要使用内部系统调色板(20种颜色)之外的颜色,则应该创建一个新的逻辑调色板并将其选入到设备上下文中.再把设备上下文中的逻辑调色板实现到系统调色板中,新的颜色才能实现.在逻辑调色板被实现到系统调色板时,Windows会建立一个调色板映射表,当设备上下文用逻辑调色板中的颜色绘图时,GDI绘图函数会查询调色板映射表以把像素值从逻辑调色板的索引转换成系统调色板的索引.创建调色板BOOL CreatePalette(LPLOGPALETTE lpLogPalette );其中lpLogPalette是一个指向LOGPALETTE 结构的指针typedef struct tagLOGPALETTE { WORD palVersion; //windows版本号,一般是0x300WORD palNumEntries; //调色板中颜色表项的数目PALETTEENTRY palPalEntry[1]; //每个表项的颜色和使用方法} LOGPALETTE;typedef struct tagPALETTEENTRY {BYTE peRed; //红(0-255)BYTE peGreen;// 绿BYTE peBlue; //蓝BYTE peFlags; //一般为0} PALETTEENTRY;上面只是建立了一个逻辑调色板,而逻辑调色板只是一张孤立的颜色表,并不能对系统产生影响,所以要使用调色板还需要下面这些函数CPalette* SelectPalette(CPalette* pPalette,BOOL bForceBackground );这个函数用来将一个调色板载入设备上下文,第一个参数是一个调色板指针,第二个参数用来指定调色板作为前景色还是背景色使用,为TURE时,作为背景色使用,为FALSE时,当窗口是活动窗口或活动窗口的子窗口是,调色板将做为前景色使用,否则做为背景色来使用.如果使用调色板的是一个内存设备上下文,则该参数被忽略.UINT RealizePalette( );该函数把设备上下文中的逻辑调色板实现到系统调色板中, 函数的返回值表明调色板映射表中有多少项被改变了这两个函数的使用如下:CPalette *pOldPalette ;CWindowDC dc(this) ;pOldPalette=dc.SelectPalette(&pal, FALSE) ;dc.RealizePalette() ;dc.SelectPalette(pOldPalette, FALSE) ;如果某一个窗口要显示特殊的颜色,那么一般应该在处理WM_PAINT消息时实现自己的逻辑调色板,也就是说,在OnPaint或OnDraw函数中重绘以前,要调用SelectPalette和RealizePalette,如果窗口显示的颜色比较重要,则要在调用SelectPalette时指定bForceBackground参数为FALSE.创建调色板的一般步骤:1 建立一个LOGPALETTE结构和PALETTEENTRY数组2 对PALETTEENTRY数组进行赋值,即创建调色板颜色表3 建立CPalette对象并使用CreatePalette函数初始化调色板对象4 使用SelectPalette函数将设备描述表和调色板联系起来5 使用CDC中的RealizePalette函数使调色板生效为了协调各个窗口对系统调色板的使用,Windows在必要的时候会向顶层窗口和重绘窗口发送消息WM_QUERYNEWPALETTE和WM_PALETTECHANGED.当某一顶层或重叠窗口被激活时,会收到WM_QUERYNEWPALETTE消息,在窗口的创建之处也会收到该消息,该消息先于WM_PAINT消息到达窗口,如果活动窗口要使用特殊的颜色,则在收到该消息时应该实现自己的逻辑调色板并重绘窗口.11.1.1 调色板的原理PC机上显示的图象是由一个个像素组成的,每个像素都有自己的颜色属性。
在PC的显示系统中,像素的颜色是基于RGB模型的,每一个像素的颜色由红(B)、绿(G)、蓝(B)三原色组合而成。
每种原色用8位表示,这样一个的颜色就是24位的。
以此推算,PC的SVGA适配器可以同时显示224约一千六百多万种颜色。
24位的颜色通常被称作真彩色,用真彩色显示的图象可达到十分逼真的效果。
但是,真彩色的显示需要大量的视频内存,一幅640×480的真彩色图象需要约1MB的视频内存。
由于数据量大增,显示真彩色会使系统的整体性能迅速下降。
为了解决这个问题,计算机使用调色板来限制颜色的数目。
调色板实际上是一个有256个表项的RGB颜色表,颜色表的每项是一个24位的RGB颜色值。
使用调色板时,在视频内存中存储的不是的24位颜色值,而是调色板的4位或8位的索引。
这样一来,显示器可同时显示的颜色被限制在256色以内,对系统资源的耗费大大降低了。
显示器可以被设置成16、256、64K、真彩色等显示模式,前两种模式需要调色板。
在16或256色模式下,程序必须将想要显示的颜色正确地设置到调色板中,这样才能显示出预期的颜色。
图11.1显示了调色板的工作原理。
使用调色板的一个好处是不必改变视频内存中的值,只需改变调色板的颜色项就可快速地改变一幅图象的颜色或灰度。
在DOS中,调色板的使用不会有什么问题。
由于DOS是一个单任务操作系统,一次只能运行一个程序,因此程序可以独占调色板。
在Windows环境下,情况就不那么简单了。
Windows是一个多任务操作系统,可以同时运行多个程序。
如果有几个程序都要设置调色板,就有可能产生冲突。
为了避免这种冲突,Windows使用逻辑调色板来作为使用颜色的应用程序和系统调色板(物理调色板)之间的缓冲。
图11.1 调色板工作原理在Windows中,应用程序是通过一个或多个逻辑调色板来使用系统调色板(物理调色板)。
在256色系统调色板中,Windows保留了20种颜色作为静态颜色,这些颜色用作显示Windows界面,应用程序一般不能改变。
缺省的系统调色板只包含这20种静态颜色,调色板的其它项为空。
应用程序要想使用新的颜色,必须将包含有所需颜色的逻辑调色板实现到系统调色板中。
在实现过程中,Windows首先将逻辑调色板中的项与系统调色板中的项作完全匹配,对于逻辑调色板中不能完全匹配的项,Windows将其加入到系统调色板的空白项中,系统调色板总共有236个空白项可供使用,若系统调色板已满,则Windows将逻辑调色板的剩余项匹配到系统调色板中尽可能接近的颜色上。
每个设备上下文都拥有一个逻辑调色板,缺省的逻辑调色板只有20种保留颜色,如果要使用新的颜色,则应该创建一个新的逻辑调色板并将其选入到设备上下文中。
但光这样还不能使用新颜色,程序只有把设备上下文中的逻辑调色板实现到系统调色板中,新的颜色才能实现。
在逻辑调色板被实现到系统调色板时,Windows会建立一个调色板映射表。
当设备上下文用逻辑调色板中的颜色绘图时,GDI绘图函数会查询调色板映射表以把像素值从逻辑调色板的索引转换成系统调色板的索引,这样当像素被输出到视频内存中时就具有了正确的颜色值。
图11.2说明了这种映射关系,从图中读者可以体会到逻辑调色板的缓冲作用。
在该图中,GDI绘图函数使用逻辑调色板的索引1中的颜色来绘图,通过查询调色板映射表,得知系统调色板中的第23号索引与其完全匹配,这样实际输出到视频内存中的像素值是23。
注意图中还演示了颜色的不完全匹配,即逻辑调色板中的索引15和系统调色板中的索引46。
每个要使用额外颜色的窗口都会实现自己的逻辑调色板,逻辑调色板中的每种颜色在系统调色板中都有相同或相近的匹配。
调色板的实现优先权越高,匹配的精度也就越高。
Windows规定,活动窗口的逻辑调色板(如果有的话)具有最高的实现优先权。
这是因为活动窗口是当前与用户交互的窗口,应该保证其有最佳的颜色显示。
非活动窗口的优先权是按Z 顺序自上到下确定的(Z顺序就是重叠窗口的重叠顺序)。
活动窗口有权将其逻辑调色板作为前景调色板实现,非活动窗口则只能实现背景调色板。
提示:术语活动窗口(Active window)或前台窗口(Foreground window)是指当前与用户交互的窗口,活动窗口的顶端的标题条呈高亮显示,而非活动窗口的标题条则是灰色的。
活动窗口肯定是一个顶层窗口(Top-level window),顶层窗口是指没有父窗口或父窗口是桌面窗口的窗口,这种窗口一般都有标题和边框,主要包括框架窗口和对话框。
术语重叠窗口是指作为应用程序主窗口的窗口,我们可以把对话框看成是一种特殊的重叠式窗口。
图11.2 调色板的映射关系11.1.2 调色板的创建和实现MFC的CPalette类对逻辑调色板进行了封装。
该类的成员函数CreatePalette负责创建逻辑调色板,该函数的声明为:BOOL CreatePalette( LPLOGPALETTE lpLogPalette ); //成功则返回TRUE。
参数lpLogPalette是一个指向LPLOGPALETTE结构的指针,LPLOGPALETTE结构描述了逻辑调色板的内容,该结构的定义为:typedef struct tagLOGPALETTE {WORD palVersion; //Windows版本号,一般是0x300WORD palNumEntries; //调色板中颜色表项的数目PALETTEENTRY palPalEntry[1]; //每个表项的颜色和使用方法} LOGPALETTE;结构中最重要的成员是PALETTEENTRY数组,数组项的数目由palNumEntries成员指定。
PALETTEENTRY结构对调色板的某一个颜色表项进行了描述,该结构的定义为:typedef struct tagPALETTEENTRY {BYTE peRed; //红色的强度(0~255,下同)BYTE peGreen; //绿色的强度BYTE peBlue; //蓝色的强度BYTE peFlags;} PALETTEENTRY;成员peFlags说明了颜色表项的使用方法,在一般应用时为NULL,若读者对peFlags的详细说明感兴趣,可以查看Visual C++的联机帮助。