起始结构

typedef struct tagBITMAPFILEHEADER {

WORD bfType; //类型名,字符串“BM”,

DWORD bfSize; //文件大小

WORD bfReserved1; //保留字

WORD bfReserved2; //保留字

DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和

} BITMAPFILEHEADER;

对应数据

WORD bfType : 0x4d42

DWORD bfSize:0x5b276

WORD bfReserved1:0x0

WORD bfReserved2:0x0

DWORD bfOffBits:0x76

紧跟着是

typedef struct tagBITMAPINFOHEADER{

DWORD biSize; //指定此结构体的长度,0x28

LONG biWidth; //位图宽

LONG biHeight; //位图高.为正,表示从下往上存储,左下角是起点。为负,表示从上往下储存,左上角是起点

WORD biPlanes; //平面数,为1

WORD biBitCount //采用颜色位数,可以是1,2,4,8,16,24,32

DWORD biCompression; //压缩方式,可以是0,1,2,其中0表示不压缩

DWORD biSizeImage; //实际位图数据占用的字节数

LONG biXPelsPerMeter; //X方向分辨率

LONG biYPelsPerMeter; //Y方向分辨率

DWORD biClrUsed; //使用的颜色数,如果为0,则表示默认值(2^颜色位数)

DWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的

} BITMAPINFOHEADER;

对应数据

DWORD biSize:0x28

LONG biWidth:0x480

LONG biHeight:0x288

WORD biPlanes:0x1

WORD biBitCount:0x4

DWORD biCompression:0x0

DWORD biSizeImage:0x5B200

LONG biXPelsPerMeter:0x0

LONG biYPelsPerMeter:0x0

DWORD biClrUsed:0x0

DWORD biClrImportant:0x0

4位位图有调色板2^4=16个

typedef struct tagRGBQUAD {

BYTE rgbBlue; //蓝色

BYTE rgbGreen; //绿色

BYTE rgbRed; //红色

BYTE rgbReserved; //保留值,常用于Alpha透明值

} RGBQUAD;

索引0:(B,G,R,A)=(0x0,0x0,0x0,0x0)

索引1:(B,G,R,A)=(0x0,0x0,0x80,0x0)

....

索引15:(B,G,R,A)=(0xff,0xff,0xff,0x0)

其余是数据区域,关于4位位图,有两种。本随笔中展示的是BI_RGB(未压缩),另一种是BI_RLE4(数据区数据压缩),压缩方式请参考下面微软的官方链接,解码我就不写了,因为GDI的CreateDIBSection函数自带解码,所以偷懒了。哈哈哈。

原理地址:https://docs.microsoft.com/zh-cn/windows/desktop/gdi/bitmap-compression

简单说下,BI_RLE4压缩分两个模式,一个是Encoded模式,另一种是absolute模式,官方针对此模式的讲解都给出了例子,大家作为练习,可以读了上面的官方文档,再写,难度不大。

代码参考最后

BMP位图之4位位图(二)的更多相关文章

  1. BMP位图之8位位图(三)

    起始结构 typedef struct tagBITMAPFILEHEADER { WORD bfType; //类型名,字符串"BM", DWORD bfSize; //文件大小 ...

  2. BMP位图之1位位图(一)

    起始结构 typedef struct tagBITMAPFILEHEADER { WORD bfType; //类型名,字符串"BM", DWORD bfSize; //文件大小 ...

  3. windows设备相关位图与设备无关位图

    windows支持两种位图格式,DDB(device-dependent bitmap),DIB(device-independent bitmap).设备相关位图用于windows显示系统中,其图像 ...

  4. bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换

    今日,有同事问我.rgb555模式下的位图文件的格式问题,于是花了一下午的时间通过推測与測试,分析出了例如以下bmp文件在rgb555模式下的文件存储规律: 1:bmp文件的文件信息头中的biBitC ...

  5. 为什么24位位图(真彩色)的biSizeImage不等于(biWidth*biBitCount+31)/32*4*biHeight?

    规定的,规定BMP文件的像素数据是按行存储的,而且每行的字节数必须为4的倍数,如果实际的像素数据不是4的倍数咋办?这就需要字节对齐,对齐是在一行的末尾添0以补足一行的字节数为4的倍数, ( biWid ...

  6. SharpDX之Direct2D教程II——加载位图文件和保存位图文件

    本系列文章目录: SharpDX之Direct2D教程I——简单示例和Color(颜色) 绘制位图是绘制操作的不可缺少的一部分.在Direct2D中绘制位图,必须先利用WIC组件将位图加载到内存中,再 ...

  7. mfc 位图本地存储 本地位图读取显示

    一.读取CImage //在绘图函数中直接使用参数pDC,无需定义 CDC* pDC = GetDC(): //读去位图路径,根据实际情况修改 CString loatImagePath = TEXT ...

  8. oracle 表空管理方式(LMT)、ASSM段管理方式、一级位图块、二级位图块、三级位图块。

    今天是2013-12-16,今天和明天是我学习oracle生涯中一个特殊的日子.今天晚上进行了一下表空间管理方式的学习,在此记录一下笔记. 对于oracle数据库最小i/0单位是数据块,最想分配空间单 ...

  9. Android系统移植与调试之------->如何使用PhotoShop转换24位的bmp图片为16位bmp图片

    使用Android移植时候,很多图片都需要16为的bmp格式,所以研究了一下如何从24位转换成16位,供大家参阅 step1:查看bmp图片的属性,如下图所示,是24位的 step2:用PhotoSh ...

随机推荐

  1. 817. Linked List Components - LeetCode

    Question 817. Linked List Components Solution 题目大意:给一个链表和该链表元素组成的一个子数组,求子数组在链表中组成多少个片段,每个片段中可有多个连续的元 ...

  2. 代码模板整理(0):先水一波a+b

    梦开始的地方 "Hello World!" #include<bits/stdc++.h> using namespace std; int main(){ cout& ...

  3. 直接将A类库复制到vs中的B类库,但是解决方案菜单中不显示

    1.将要复制的文件夹复制粘贴到你要用的vs项目中 2.右键 添加   现有项目  选中xxxxx.csproj文件   点击  打开   就可以了

  4. 字符串的操作、 Math类

    字符串的操作 我们先来定义一个字符串,如果来进行过去长度,获取内容. 我们来写一个小测试! public static void main(String[] args) { String aa = & ...

  5. [自制操作系统] 第02回 初识MBR

    目录 一.前景回顾 二.写一个粗略的MBR 三.运行测试 一.前景回顾 上回说到,开机的启动过程就是当时Intel和BIOS等硬件厂商所制定的规则,现在我们来回顾一下有如下三点: 1.按下开机键后,C ...

  6. BUUCTF-后门查杀

    后门查杀 后门查杀这种题最好还是整个D盾直接扫描目录方便. 查看文件得到flag

  7. python基础知识-day8(函数实战)

    1 def out(): 2 username=input("请输入用户名:\n") 3 password=input("请输入密码:\n") 4 return ...

  8. Java TIF、JPG、PNG等图片转换

    代码如下: public static void main(String[] args) { try { BufferedImage bufferegImage = ImageIO.read(new ...

  9. dotnet 控制台 使用 Microsoft.Maui.Graphics 配合 Skia 进行绘图入门

    本文将告诉大家如何在 dotnet 的控制台模式下,采用 MAUI 自绘库 Microsoft.Maui.Graphics 进行绘图,设置 Microsoft.Maui.Graphics 底层调用 M ...

  10. 纪念我逝去的n个小时

    纪念我逝去的n个小时 某人的惨案要我擦屁股=.= #include <bits/stdc++.h> using namespace std; template<class T> ...