Bmp格式圖片與16進制的互相轉換簡解 Python


BMP TO HEX

首先介紹Github上一個簡單的Bmp轉成16進制的py:

https://github.com/robertgallup/bmp2hex

網上這種例子很多。思路也簡單:將bmp文件一個個二進制進行分析,這里的1-2表示2個字節,16個二進制數據,0xXXXX四位16進制數據~:
————————————————

11-2:(這里的數字代表的是字節,下同)圖像文件頭。0x4d42=’BM’,表示是Windows支持的BMP格式。(注意:查ascii表B 0x42,M0x4d,bfType 為兩個字節,B為low字節,M為high字節所以bfType=0x4D42,而不是0x424D,請注意)
23-6:整個文件大小。4690 0000,為00009046h=3693437-8:保留,必須設置為0。
49-10:保留,必須設置為0。
511-14:從文件開始到位圖數據之間的偏移量(14+40+4*(2^biBitCount))(在有顏色板的情況下)。4600 0000,為00000046h=70,上面的文件頭就是35字=70字節。
位圖信息頭
615-18:位圖圖信息頭長度。
7) 19-22:位圖寬度,以像素為單位。8000 0000,為00000080h=128823-26:位圖高度,以像素為單位。9000 0000,為00000090h=144927-28:位圖的位面數,該值總是1。0100,為0001h=11029-30:每個像素的位數。有1(單色),416色),8256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增強型真彩色)。1000為0010h=161131-34:壓縮說明:有0(不壓縮),1(RLE 88位RLE壓縮),2(RLE 44位RLE壓縮,3(Bitfields,位域存放)。RLE簡單地說是采用像素數+像素值的方式進行壓縮。T408采用的是位域存放方式,用兩個字節表示一個像素,位域分配為r5b6g5。圖中0300 0000為00000003h=3(這張圖片不存在顏色板)。
1235-38:用字節數表示的位圖數據的大小,該數必須是4的倍數,數值上等於:一行所占的字節數×位圖高度。0090 0000為00009000h=80×90×2h=36864。假設位圖是24位,寬為41,高為30,則數值= (biWidth*biBitCount+31)/32*4*biHeight,即=(41*24+31)/32*4*30=3720
1339-42:用象素/米表示的水平分辨率。A00F 0000為0000 0FA0h=40001443-46:用象素/米表示的垂直分辨率。A00F 0000為0000 0FA0h=40001547-50:位圖使用的顏色索引數。設為0的話,則說明使用所有調色板項。
1651-54:對圖象顯示有重要影響的顏色索引的數目。如果是0,表示都重要。
彩色板
17)(55+0)到(50-1+2^biBitCount):彩色板規范。對於調色板中的每個表項,用下述方法來描述RGB的值:
1字節用於藍色分量
1字節用於綠色分量
1字節用於紅色分量
1字節用於填充符(設置為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格式的說明咯。全部信息都在,不需要任何處理改變。而我傻傻地搜半天,~。~|||


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM