Bmp格式图片与16进制的互相转换简解 Python
BMP TO HEX
首先介绍Github上一个简单的Bmp转成16进制的py:
https://github.com/robertgallup/bmp2hex
网上这种例子很多。思路也简单:将bmp文件一个个二进制进行分析,这里的1-2表示2个字节,16个二进制数据,0xXXXX四位16进制数据~:
————————————————
)-:(这里的数字代表的是字节,下同)图像文件头。0x4d42=’BM’,表示是Windows支持的BMP格式。(注意:查ascii表B 0x42,M0x4d,bfType 为两个字节,B为low字节,M为high字节所以bfType=0x4D42,而不是0x424D,请注意)
)-:整个文件大小。 ,为00009046h=。
)-:保留,必须设置为0。
)-:保留,必须设置为0。
)-:从文件开始到位图数据之间的偏移量(++*(^biBitCount))(在有颜色板的情况下)。 ,为00000046h=,上面的文件头就是35字=字节。
位图信息头
)-:位图图信息头长度。
) -:位图宽度,以像素为单位。 ,为00000080h=。
)-:位图高度,以像素为单位。 ,为00000090h=。
)-:位图的位面数,该值总是1。,为0001h=。
)-:每个像素的位数。有1(单色),(色),(色),(64K色,高彩色),(16M色,真彩色),(4096M色,增强型真彩色)。为0010h=。
)-:压缩说明:有0(不压缩),(RLE ,位RLE压缩),(RLE ,位RLE压缩,(Bitfields,位域存放)。RLE简单地说是采用像素数+像素值的方式进行压缩。T408采用的是位域存放方式,用两个字节表示一个像素,位域分配为r5b6g5。图中0300 为00000003h=(这张图片不存在颜色板)。
)-:用字节数表示的位图数据的大小,该数必须是4的倍数,数值上等于:一行所占的字节数×位图高度。 为00009000h=××2h=。假设位图是24位,宽为41,高为30,则数值= (biWidth*biBitCount+)/**biHeight,即=(*+)/**=
)-:用象素/米表示的水平分辨率。A00F 为0000 0FA0h=。
)-:用象素/米表示的垂直分辨率。A00F 为0000 0FA0h=。
)-:位图使用的颜色索引数。设为0的话,则说明使用所有调色板项。
)-:对图象显示有重要影响的颜色索引的数目。如果是0,表示都重要。
彩色板
)(+)到(-+^biBitCount):彩色板规范。对于调色板中的每个表项,用下述方法来描述RGB的值:
字节用于蓝色分量
字节用于绿色分量
字节用于红色分量
字节用于填充符(设置为0)
HEX TO BMP
如果你想要手写一个Bmp,按照上面的格式去写吧,祝你好运!
而我已经有了一个16进制的数据,转一下就可以!如下:
data0 = "424DD6020000000000003600000028000000100000000E0000000100180000000000A002000000000000000000000000000000000000FFFFFFFFFFFFD6DEEFA59C9C6B5A5A736363736363736363736363736363736363736363AD9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF849CE7848CB56B5A5A2108002108002108002108002108002108002108006B5252FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEE7F7215AEF6B84D69494A5634A4A4A31294A31294A31294A31294231298C7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9CB5EF104AE72963E794A5D6F7F7F7FFFFFFFFFFFFFFF7F7FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A73E7104ADE104AE74A7BEFCED6F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6DEF71852DE104ADE104ADE104ADE7394EFE7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94ADEF396BDE396BDE396BDE3163DE5A84E7CED6F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6DEF77394EF7394EF7394EF7394E76B8CE7B5C6F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FF396BDE104ADE104ADE104ADE2152DE9CB5EFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8CA5EF104ADE104ADE104ADE7394EFE7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6DEF7184ADE104ADE4A7BEFCED6F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4273E7215AEF849CDEADADBDB5ADB5ADA59CAD9C9CAD9C9CAD9C9CCEC6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94ADF7527BE7A5A5C652424A2100002108002108002108002108002108006B5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5BDE79C94A54221212910083118183118183118183118183118183118187B736BFFFFFFFFFFFFFFFFFF"
with open("test.bmp", 'wb') as bmp_file:
bmp_file.write(bytearray.fromhex(data)) # convert values to bytes
这里我的数据看前4位!424D,就是bmp格式的说明咯。全部信息都在,不需要任何处理改变。而我傻傻地搜半天,~。~|||
Bmp格式图片与16进制的互相转换简解 Python的更多相关文章
- bgcolor RGB 和16进制之间的转换,16进制转RGB,源码
<p>bgcolor RGB 和16进制之间的转换,16进制转RGB,源码例如:<br /> 输入 201,255,201 转换成 #C9FFC9</p> < ...
- Python内置进制转换函数(实现16进制和ASCII转换)
在进行wireshark抓包时你会发现底端窗口报文内容左边是十六进制数字,右边是每两个十六进制转换的ASCII字符,这里使用Python代码实现一个十六进制和ASCII的转换方法. hex() 转换一 ...
- C#串口通讯中常用的16进制的字节转换
1.对于通讯协议的十六进制数值进行简单转换 //二进制转十进制Console.WriteLine("二进制 111101 的十进制表示: "+Convert.ToInt32(&qu ...
- AES加密 16进制与二进制转换
import java.security.Key; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax ...
- java字节数组和16进制之间的转换
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ pac ...
- [iOS]把16进制(#871f78)颜色转换UIColor
// // ViewController.m // text // // Created by 李东旭 on 16/1/22. // Copyright © 2016年 李东旭. All rights ...
- C#中2、8、16进制 有符号转换10进制正负数
曾经让我苦想的其他进制转有符号整型问题,结果自己想到方法解决后才发现原来如此简单. 1.Int16(2个byte长度 ) : 方法 :Convert.ToInt16(进制编码,进制) a.16进制转1 ...
- 16进制到byte转换
我们经常会看到这样的语法 (byte) 0xAD 0xAD实际是个16进制,转换成二进制为:10101101,转换成10进制是:173,它是个正数 10101101只是int的简写,int由4个byt ...
- python常用的十进制、16进制之间的转换
一 整数之间的进制转换: hex(16) # 10进制转16进制 oct(8) # 10进制转8进制 bin(8) # 10进制转2进制 二 字符串转整数 int(') # 字符串转换成10进制整数 ...
随机推荐
- 使用jquery结合ajax做下拉刷新页面,上拉加载页面,俗称分页
jquery结合iscroll.js做下拉刷新页面,上拉加载页面 先上代码,里面都有注释这就不一一说明了 <!DOCTYPE html> <html lang="en&qu ...
- navcat导入mysql.sql出现:2006, 'MySQL server has gone away'
navcat导入mysql.sql出现:2006, 'MySQL server has gone away' OperationalError (2006, ‘MySQL server has gon ...
- Kubernetes 学习22 kubernetes容器资源需求资源限制及HeapSter(翻车章节)
一.概述 1.接下来介绍在k8s上运行pod对象时我们如何去监控我们系统级的资源指标以及业务级别的资源指标.数据如何获取和监控.在此之前先介绍一下Pod对象的资源请求和资源限制.即容器的资源需求和资源 ...
- window的pid为4的system进程占用80端口的解决办法
1.taskkill /pid 4 /f 无法终止进程占用80端口的进程时,运行 net stop http(若是第一次运行不能终止所有服务,继续运行该命令)
- 连接linux的几款工具 简介
1.Putty --支持ppk,pub格式密码连接 --支持centos --支持windows操作系统安装,网上去下载直接可以使用,免费的 安装文件在我的百度网盘:putty 安装后如下: load ...
- 部署Django到云服务器(centos+nginx+mysql+uwsgi+python3)【操作篇(2)】
接上篇操作篇(1):https://blog.csdn.net/jacky_zhuyuanlu/article/details/82880612 (七)创建Django项目 (1)建立文件夹,存放网站 ...
- java使用freemark生成word/pdf
目录 一. 背景 二.实现的技术选型以及遇到的坑 三.最终的效果 2.1 .doc word效果展示 2.1 .docx word效果展示 2.2 docx word转pdf效果展示 三.准备工作及代 ...
- UMD、CommonJS、ES Module、AMD、CMD模块的写法
AMD异步模块规范 RequireJS就是AMD的一个典型的实现. 以下是一个只依赖与jQuery的模块代码: // foo.js define(['jquery'], function($){ // ...
- C语言--二维数组
一.PTA实验作业 题目1:7-2 求整数序列中出现次数最多的数 1. 本题PTA提交列表 2. 设计思路 定义变量n表示输入整数个数,count表示每个数出现次数,i.j表示循环变量,k表示次数最多 ...
- 范仁义web前端介绍课程---1、课程意义
范仁义web前端介绍课程---1.课程意义 一.总结 一句话总结: 提供的这一整套学习方法和资源,配合艾宾浩斯遗忘曲线等各种复习.学习算法和后续会有的娱乐化学习方式,能否真正做到让学过的东西不再忘记. ...