`
tubaluer
  • 浏览: 1446089 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

windows程序设计之DIB操作

 
阅读更多
主要介绍下与设备无关的位图DIB(Device Independent Bitmap)


位图的基本格式
1.文件头
typedef struct tagBITMAPFILEHEADER {
WORD bfType;//bmp图类型为'BM'或者0X4D42
DWORD bfSize;//整个文件大小
WORD bfReserved1;//0
WORD bfReserved2;//0
DWORD bfOffBits;//DIB像素数据偏移
} BITMAPFILEHEADER
2.信息头
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;//结构体大小 = 40
LONG biWidth;//文件宽度(像素)
LONG biHeight;//文件高度(像素)
WORD biPlanes;//1
WORD biBitCount;//每像素位数(1,4,8,16,24,32)
DWORD biCompression;//压缩方式
DWORD biSizeImage;//实际位图数据占用的字节数
LONG biXPelsPerMeter;//X方向分辨率
LONG biYPelsPerMeter;//Y方向分辨率
DWORD biClrUsed;//使用的颜色数
DWORD biClrImportant;//重要颜色数

} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;

biBitCount字段
$ 1(2色DIB)
$ 4(16色DIB)
$ 8(256色DIB)
$ 24(全色DIB)

3.RGB色彩表(不一定有)
对于像素位(biBitCount字段)是1,4,和8时,BITMAPINFOHEADER后面跟着的是色彩表。
typedef struct tagRGBQUAD {
BYTE rgbBlue;//蓝色
BYTE rgbGreen;//绿色
BYTE rgbRed;//红色
BYTE rgbReserved;//保留,0
} RGBQUAD;

每个像素点都是一个RGB,三种色彩组成颜色。要注意的就是里面的元素顺序是BGR。


4.位图像素位
这里才是图像数据的真实存放处,可以在这里读取图像的数据进行操作。每个像素点都是由RGB数组构成。要注意的是,在DIB中,图像的底行是文件的第一行,图像的顶行是文件的最后一行。但是对于同一行来说,还是从左到右存放数据的。windows程序设计上是这样说的:从下到上DIB的原点是位图图像的左下角,它是图像的第一行的第一个像素。从上到下DIB的原点也是位图图像的左下角,但是这种情况下,左下角是位图数据的最后一行的第一个像素。
DIB中的行数是BITMAPINFOHEADER结构中的biHeight字段,每一行的像素是该结构中biWidth字段,每一行从左边开始,向右数,每个像素位数由bcBitCount确定。
每行的长度必须是4的倍数。
RowLength = 4 * ((bmch.bcWidth * bmch.bcBitCount + 31) / 32)计算;

总的像素位数据大小 = RowLength *bmch.biHeight计算。




分享到:
评论

相关推荐

    位图信息查看程序 DIB BITMAPINFOHEADER BITMAPCOREHEADER

    8.改程序在《windows程序设计》上的一个例子改编而来,并且正在完善该位图类中, 以加入更多丰富的底层操作功能。 改试验程序主要供想研究位图结构的人查看用。 9.windows搞出了4种位图种类,真作孽~~ 另,16、24、...

    用C语言开发手机软件 -Windows+CE+6.0开发者参考

    第15章 系统程序设计 15.1 WindowsCE的内存体系结构 15.1.1 应用程序的地址空间 15.1.2 内核态的地址空间 15.2 编写跨平台的WindowsCE应用程序 15.2.1 平台与操作系统版本 15.2.2 编译时的版本确定 15.2.3 显式链接 ...

    用C语言开发手机软件-Windows CE 6.0开发者参考

    第15章 系统程序设计 15.1 WindowsCE的内存体系结构 15.1.1 应用程序的地址空间 15.1.2 内核态的地址空间 15.2 编写跨平台的WindowsCE应用程序 15.2.1 平台与操作系统版本 15.2.2 编译时的版本确定 15.2.3 显式链接 ...

    VC++ 编程指南_中文chm

     1.3 Windows应用程序设计的特点  1.4 Windows应用程序的开发工具  1.5 面向对象和Windows编程 第二课 使用Visual C++ 5.0  2.1 Visual C++可视化集成开发环境  2.2 创建、组织文件、工程和工作区  2.3 ...

    VC++可视化编程指南

     1.3 Windows应用程序设计的特点  1.4 Windows应用程序的开发工具  1.5 面向对象和Windows编程 第二课 使用Visual C++ 5.0  2.1 Visual C++可视化集成开发环境  2.2 创建、组织文件、工程和工作区  2.3 ...

    VC++编程指南(中文版).chm

     1.3 Windows应用程序设计的特点  1.4 Windows应用程序的开发工具  1.5 面向对象和Windows编程 第二课 使用Visual C++ 5.0  2.1 Visual C++可视化集成开发环境  2.2 创建、组织文件、工程和工作区  2.3 ...

    《Visual C++数字图像处理开发入门与编程实践》源码

    2.3.2 Windows消息和事件驱动 40 2.3.3 常用消息 41 2.3.4 MFC的消息映射 42 2.4 消息与事件响应 44 2.4.1 添加类 44 2.4.2 添加类成员 45 2.4.3 添加消息响应 46 2.4.4 添加事件 47 2.4.5 添加函数重写 48 2.4.6 ...

    Visual C++ 编程资源大全(源码 图形)

    Screen.zip 一个基于DirectX的截图示例,又是MMX的新作^o^,你看懂了话都能截图了(14KB)<END><br>22,opengl1.zip OpenGL三维图形程序设计(539kb)<END><br>23,wingrap.zip Windows图形编程(189kb)<END><br>24...

    CAX 文档管理浏览工具 ABViewer Enterprise 14.1.0.39 + x64 中文多语免费版.zip

    具有相关文档,可以执行从设计到工程的所有操作的多功能性 易于使用,快速,专业且功能强大的产品 ABViewer Enterprise 14 最重要的方面是质量,速度和价格! ABViewer Enterprise 14 支持的格式: AutoCAD DWG,...

    C++MFC教程

    |------ 1.3 利用Visual C++/MFC开发Windows程序的优势 |------ 1.4 利用MFC进行开发的通用方法介绍 |------ 1.5 MFC中常用类,宏,函数介绍 +-- 第二章 图形输出 |------ 2.1 和GUI有关的各种对象 |------ 2.2 在...

    Visual C++ 编程资源大全(源码 控件)

    (29KB)<END><br>50,DirTree.zip 这个派生的TreeCtrl类使你能够在自己的程序中方便地加入浏览目录、文件的功能,就像Windows Explore一样。缺陷:重画时有闪烁。总的说来不错。(42KB)<END><br>51,CTreeList.zip ...

Global site tag (gtag.js) - Google Analytics