首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python /DIB字节槽,压缩槽

python /DIB字节槽,压缩槽
EN

Stack Overflow用户
提问于 2017-05-11 17:11:26
回答 1查看 429关注 0票数 0

我正在努力学习(通过自己和堆栈溢出的帮助)读取打包和分发的二进制数据。我这么做是出于强烈的好奇心,但我必须事先说,我在这一领域没有受过适当的教育,我所知道的一切都是我在网络上发现的,也是一种尝试/错误的工作。

为了准备这项工作,我在photoshop中制作了几个简单的1像素32位文件,用不同的颜色进行测试和比较,并帮助我区分不同的字节和位。并开始梳理维基百科和msdn位图网页。

“文学”如果有人好奇,BMP/DIB报头 MSDN网页

我在页眉的DIB部分用4字节的压缩“插槽”点击了“路障”。

我所做的临时函数返回值为6的小endian中的整数。

以下是功能:

代码语言:javascript
复制
def BMP_compresion(fileobj): # bitmap compresion ??? i have no idea what the hell is this
    fileobj = manageFile(fileobj)
    fileobj.seek(34)
    comp = fileobj.read(4)
    toStart(fileobj) # returns the file to position 0 or closes the file if file needs to be closed
    return readNUMB(comp,False) # reads integer with struct.unpack

这一功能目前是临时的,正如我之前所说的,我还在搞清楚。

现在我明白像素必须从原始文件像素定义转换(或者压缩),但是我不知道6应该代表什么?

我甚至认为这可能是错误的,“压缩”本身是一种格式的压缩,从另一种类型的图像转换为bmp (例如:1-PNG,2-JPEG等)。

我甚至认为我的红色是错的,而不是整型的,我应该得到原始的二进制,这应该告诉我一些东西。

二进制:\x06\x00\x00\x00

作为二进制字符串:◦◦◦

这让我更加困惑。

维基百科的文章说:

索引彩色图像可以使用4位或8位RLE或Huffman 1D算法进行压缩。OS/2 BITMAPCOREHEADER2 24bpp图像可以采用24位RLE算法进行压缩。16 The和32 The图像总是未经压缩而存储的。请注意,如果需要的话,所有颜色深度的图像都可以不受压缩地存储。

在msdn网页上写着:

BMP是Windows用来存储与设备无关和与应用无关的图像的标准格式.给定BMP文件的每像素(1、4、8、15、24、32或64)的位数在文件头中指定。BMP文件每像素24位是常见的。BMP文件通常不被压缩,因此不适合在Internet上传输。

所以,它通常不会压缩..。那么6代表什么呢?“这里什么都没发生,继续.”?

所以我的问题是:

是否有某种标准化的图像压缩编码?能帮我导航这些字节槽吗?我可以稍后再详细研究。有没有人有任何链接或书籍可以指导我在这方面的进一步探索?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-18 19:51:14

因此,首先,我需要寻找字节30,而不是34。第二,凯文太客气了,他没有向我指出维基百科上的具体章节,它说的下一件事。

压缩方法(偏移量30)可以是:

代码语言:javascript
复制
0 :> BI_RGB : the file has no compression  
1 :> BI_RLE8 : Run length encoding ( 1 byte per pixel )  -> RLE
2 :> BI_RLE4 : Run length encoding ( nibble per pixel )  -> RLE
3 :> BI_BITFIELDS : Huffman 1D  
4 :> BI_JPEG : RLE-24  
5 :> BI_PNG : BITMAPV4INFOHEADER+: PNG image for printing  
6 :> BI_ALPHABITFIELDS : RGBA fields ( byte per field, sooo 1 byte per color )  
7 :> BI_CMYK : cmyk  
11 :> BI_CMYKRLE8: RLE-8
12 :> BI_CMYKRLE4 RLE-4

因此,由于我从压缩槽中获得了值6,所以我知道我需要在没有压缩的情况下将像素网格读取为RGBA。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43921785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档