位图文件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、位图文件结构

位图文件由三部分组成:文件头+ 位图信息+ 位图像素数据

1、位图文件头。位图文件头主要用于识别位图文件。以下是位图文件头结构的定义:[cpp]view plaincopyprint?

1.typedef struct tagBITMAPFILEHEADER { // bmfh

2.WORD bfType;

3.DWORD bfSize;

4.WORD bfReserved1;

5.WORD bfReserved2;

6.DWORD bfOffBits;

7.} BITMAPFILEHEADER;

1.typedef struct tagBITMAPINFO {

2.BITMAPINFOHEADER bmiHeader;

3.RGBQUAD bmiColors[1];

4.} BITMAPINFO;

[cpp]view plaincopyprint?

1.typedef struct tagBITMAPINFOHEADER{ // bmih

2.DWORD biSize;

3.LONG biWidth;

4.LONG biHeight;

5.WORD biPlanes;

6.WORD biBitCount

7.DWORD biCompression;

8.DWORD biSizeImage;

9.LONG biXPelsPerMeter;

10.LONG biYPelsPerMeter;

11.DWORD biClrUsed;

12.DWORD biClrImportant;

13.} BITMAPINFOHEADER;

每个像素的位数*(1)

biCompression

图像的压缩格式(这个值几乎总是为0)

biSizeImage

以字节为单位的图像数据的大小(对BI_RGB压缩方式而言)

biXPelsPermeter

水平方向上的每米的像素个数

biYpelsPerMeter

垂直方向上的每米的像素个数

biClrused

调色板中实际使用的颜色数(2)

biClrImportant

现实位图时必须的颜色数(3)

说明:*是需要加以注意的部分,因为它们是我们在进行位图操作时经常参考的变量

(1)对于每个像素的字节数,分别有一下意义:

0,用在JPEG格式中

1,单色图,调色板中含有两种颜色,也就是我们通常说的黑白图片

4,16色图

8,256色图,通常说的灰度图

16,64K图,一般没有调色板,图像数据中每两个字节表示一个像素,5个或6个位表示一个RGB分量

24,16M真彩色图,一般没有调色板,图像数据中每3个字节表示一个像素,每个字节表示一个RGB分量

32,4G真彩色,一般没有调色板,每4个字节表示一个像素,相对24位真彩图而言,加入了一个透明度,即RGBA模式

(2)这个值通常为0,表示使用biBitCount确定的全部颜色,例外是使用的颜色数目小于制定的颜色深度的颜色数目的最大值。

(3)这个值通常为0,表示所有的颜色都是必需的

2.2颜色表。颜色表一般是针对16位一下的图像而设置的,对于16位和16位以上的图像,由于其位图像素数据中直接对对应像素的RGB(A)颜色进行描述,因而省却了调色板。而对于16位一下的

图像,由于其位图像素数据中记录的只是调色板索引值,因而需要根据这个索引到调色板去取得相应的RGB(A)颜色。颜色表的作用就是创建调色板。

下图是带调色板和不带调色板的位图的简单示意图

图1 带调色板和不带调色板位图之间的区别

颜色表是由颜色表项组成的,颜色表项结构的定义如下:[cpp]view plaincopyprint?

1.typedef struct tagRGBQUAD { // rgbq

2.BYTE rgbBlue;

3.BYTE rgbGreen;

4.BYTE rgbRed;

5.BYTE rgbReserved;

6.} RGBQUAD;

1.private:

2.DWORD m_dwDibSize;

3.CPalette m_Palette;

4.int m_nPaletteEntries;

5.RGBQUAD *m_pPalette;

6.unsigned char *m_pDib, *m_pDibBits;

7.BITMAPINFOHEADER *m_pBIH;

1.//加载图片

2.void CImageDisposeDlg::OnBtnloadimage()

3.{

4.// TODO: Add your control notification handler code here

5.

6.//文件路径名称

7.CString pszFilename;

8.

9.//浏览文件对话框

10.CFileDialog hFileDlg(TRUE,"bmp",

11.NULL,

12.OFN_FILEMUSTEXIST|OFN_READONLY|OFN_PATHMUSTEXIST|OFN_NOCHANGEDIR,

13.TEXT("BMP (*.bmp)|*.bmp|所有文件(*.*)|*.*|"),

14.NULL);

15.

16.if(hFileDlg.DoModal() == IDOK)

17.{

18.//获得文件路径名称

19.pszFilename=hFileDlg.GetPathName();

20.}

21.

22.//文件类

23.CFile cf;

24.

相关文档
最新文档