BMP位图之8位位图(三)
起始结构
typedef struct tagBITMAPFILEHEADER {
WORD bfType; //类型名,字符串“BM”,
DWORD bfSize; //文件大小
WORD bfReserved1; //保留字
WORD bfReserved2; //保留字
DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和
} BITMAPFILEHEADER;
对应数据

WORD bfType : 0x4d42
DWORD bfSize:0xb6836
WORD bfReserved1:0x0
WORD bfReserved2:0x0
DWORD bfOffBits:0x436
紧跟着是
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:0x8
DWORD biCompression:0x0
DWORD biSizeImage:0xb6400
LONG biXPelsPerMeter:0x0
LONG biYPelsPerMeter:0x0
DWORD biClrUsed:0x0
DWORD biClrImportant:0x0
1位位图有调色板2^8=256个,总共256*4=0x400个字节,加上0x36,正好是偏移地址0x436
对应是以下结构的数组
typedef struct tagRGBQUAD {
BYTE rgbBlue; //蓝色
BYTE rgbGreen; //绿色
BYTE rgbRed; //红色
BYTE rgbReserved; //保留值,常用于Alpha透明值
} RGBQUAD;
调色板太多省略
其余是数据区域,关于8位位图,有两种。本随笔中展示的是BI_RGB(未压缩),另一种是BI_RLE8(数据区数据压缩),压缩方式请参考下面微软的官方链接.
原理地址:https://docs.microsoft.com/zh-cn/windows/desktop/gdi/bitmap-compression
BMP位图之8位位图(三)的更多相关文章
- BMP位图之4位位图(二)
起始结构 typedef struct tagBITMAPFILEHEADER { WORD bfType; //类型名,字符串"BM", DWORD bfSize; //文件大小 ...
- BMP位图之1位位图(一)
起始结构 typedef struct tagBITMAPFILEHEADER { WORD bfType; //类型名,字符串"BM", DWORD bfSize; //文件大小 ...
- windows设备相关位图与设备无关位图
windows支持两种位图格式,DDB(device-dependent bitmap),DIB(device-independent bitmap).设备相关位图用于windows显示系统中,其图像 ...
- bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换
今日,有同事问我.rgb555模式下的位图文件的格式问题,于是花了一下午的时间通过推測与測试,分析出了例如以下bmp文件在rgb555模式下的文件存储规律: 1:bmp文件的文件信息头中的biBitC ...
- 为什么24位位图(真彩色)的biSizeImage不等于(biWidth*biBitCount+31)/32*4*biHeight?
规定的,规定BMP文件的像素数据是按行存储的,而且每行的字节数必须为4的倍数,如果实际的像素数据不是4的倍数咋办?这就需要字节对齐,对齐是在一行的末尾添0以补足一行的字节数为4的倍数, ( biWid ...
- SharpDX之Direct2D教程II——加载位图文件和保存位图文件
本系列文章目录: SharpDX之Direct2D教程I——简单示例和Color(颜色) 绘制位图是绘制操作的不可缺少的一部分.在Direct2D中绘制位图,必须先利用WIC组件将位图加载到内存中,再 ...
- oracle 表空管理方式(LMT)、ASSM段管理方式、一级位图块、二级位图块、三级位图块。
今天是2013-12-16,今天和明天是我学习oracle生涯中一个特殊的日子.今天晚上进行了一下表空间管理方式的学习,在此记录一下笔记. 对于oracle数据库最小i/0单位是数据块,最想分配空间单 ...
- php小数点后取两位的三种实现方法
php小数点后取两位的方法. 方法一.经常用到小数点后取几位,但不能进位的情况. 比如3.149569取小数点后两位,最后两位不能四舍五入.结果:3.14. 可以使用函数floor. 该函数是舍去取整 ...
- Android系统移植与调试之------->如何使用PhotoShop转换24位的bmp图片为16位bmp图片
使用Android移植时候,很多图片都需要16为的bmp格式,所以研究了一下如何从24位转换成16位,供大家参阅 step1:查看bmp图片的属性,如下图所示,是24位的 step2:用PhotoSh ...
随机推荐
- SQL中常用的字符串LEFT函数和RIGHT函数详解!
今天继续整理日常可能经常遇到的一些处理字符串的函数,记得点赞收藏!以备不时之需!看到最后有惊喜! LEFT(expression, length)函数 解析:从提供的字符串的左侧开始提取给定长度的字符 ...
- 目标检测复习之YOLO系列
目标检测之YOLO系列 YOLOV1: blogs1: YOLOv1算法理解 blogs2: <机器爱学习>YOLO v1深入理解 网络结构 激活函数(leaky rectified li ...
- React BrowserHistory 踩坑实录 布置到服务器Nginx上各种静态文件、二级地址404
由于BrowserHistory访问的是文件真实地址不仅需要前端配置package.json还需要运维端配置一下网站Nginx设置环境: "react": "^17.0. ...
- Camunda BPM的总体架构介绍
前言 Camunda是一个基于Java的框架,支持用于工作流和流程自动化的BPMN.用于案例管理的CMMN和用于业务决策管理的DMN. 本篇文章我们仅考虑BPMN流程引擎,先不涉及CMMN和 ...
- Ribbon的ServerStats引起内存泄露问题总结
问题描述 服务运行一段时间之后,出现页面卡顿加载慢的问题,使用top命令查看了服务器的使用情况,发现CPU飙高,接着查看了该进程中每个线程的占用情况,发现导致CPU高的线程是JVM垃圾回收的线程,然后 ...
- 命令行工具tabby--gi t仓库Token的使用
命令行工具tabby--git仓库Token的使用 欢迎关注H寻梦人公众号 前言 再见 Xshell !这款开源的终端工具逼格更高! 终端神器--Tabby Terminal electerm is ...
- Servlet 体系结构
Servlet体系结构 Servlet -- 接口 Genericservlet -- 抽象类 继承类接口 实现了空方法 只需要复写service方法 HttpServlet -- 抽象类 对Ht ...
- VisionPro · C# · 界面显示视觉结果图像
程序界面通过 CogRecordDisplay 控件显示视觉运行结果图像. 按指定图像显示,代码如下: using System; using System.Windows.Forms; using ...
- Linux文件查找实现
文件查找 locate:非实时查找(依赖数据库的方式) find(实时查找) locate:-- 模糊搜索(不适合经常改变的文件) locate 查询系统上预建的文件索引数据库 /var/lib/ml ...
- netty系列之:在netty中使用native传输协议
目录 简介 native传输协议的依赖 netty本地传输协议的使用 总结 简介 对于IO来说,除了传统的block IO,使用最多的就是NIO了,通常我们在netty程序中最常用到的就是NIO,比如 ...