- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我试图了解 PNG 到 BMP 的转换实际上是如何发生的。我使用在线工具创建了以下 8x8 像素的 PNG:
然后我在 OSX 终端中使用 ImageMagik 工具执行了转换:
$转换-monochrome pic.png pic.bmp
之后,我对图像进行了 hexdump:
$ hexdump -C pic.bmp
00000000 42 4d 4a 01 00 00 00 00 00 00 8a 00 00 00 7c 00 |BMJ......|.|
00000010 00 00 08 00 00 00 08 00 00 00 01 00 18 00 00 00 |................|
00000020 00 00 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 ff 00 |................|
00000040 00 00 00 00 00 ff 42 47 52 73 8f c2 f5 28 51 b8 |......BGRs...(Q.|
00000050 1e 15 1e 85 eb 01 33 33 33 13 66 66 66 26 66 66 |......333.fff&ff|
00000060 66 06 99 99 99 09 3d 0a d7 03 28 5c 8f 32 00 00 |f.....=...(\.2..|
00000070 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 |................|
00000080 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff |................|
00000090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00000130 ff ff 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff |................|
00000140 ff ff ff ff ff ff ff ff ff ff |.........|
0000014a
所以,显然我们有一个从 0x00 到 0x8C 的 BMP header 。然后我们有白色像素的 FF 和黑色像素的 00。这一切都说得通,但输出的结构却并非如此。到目前为止,似乎有一个3比1的比例。每个像素 3 个字节。我假设这意味着黑色、白色、无色?
我需要完全理解为什么每个像素有 3 个字节而不是 2 个字节。理想情况下,我希望每个像素都使用二进制 1 或 0。有没有办法做到这一点?如果没有,有人可以解释字节的布局吗?具体来说:为什么 3 个 00 位于 0x132 - 0x134 而不是最开始?
谢谢
最佳答案
事实上,如果使用 BMP3 或 BMP2 格式,Imagemagick 确实支持 1 位 BMP,但不支持 BMP4,它只是 BMP。所以如果你想要每个 channel 1 位深度,那么做
输入:
convert image.png -depth 1 BMP3:result.bmp
如果你想要整个图像的 1 位深度(即二进制),那么做
convert image.png -depth 1 -type bilevel BMP3:result2.bmp
或者
convert image.png -depth 1 -threshold 50% BMP3:result3.bmp
关于image - 如何将 PNG 转换为 1 位 BMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37329541/
我是一名优秀的程序员,十分优秀!