2

是否有一种快速工具可以将某些图像转换为每像素 2 位的原始位图数据?

4

2 回答 2

1

你可以使用Imagemagick

如果你只想要一个灰度通道:

convert image.png -depth 2 data.gray

如果您希望每个红色绿色和蓝色通道有 2 位:

convert image.png -depth 2 data.rgb
于 2012-04-14T16:21:25.507 回答
1

除了David 的 command之外,我建议您设置-size以及以下之一:

convert -depth 2 -size 1x<number-pixels> f.png f.gray
convert -depth 2 -size <number-pixels>x1 f.png f.gray

因为这些是之后使用的最简单的输出。

问题是位不可寻址,因此必须以某种方式将它们组织成字节。

我还没有找到这方面的文档,但是一个简单的例子显示了这种模式:

printf "%10s" | sed 's/ /\xFF\x00/g' > f.gray
convert -depth 8 -size 1x20 f.gray -depth 2 g.gray
hd g.gray
convert -depth 8 -size 2x10 f.gray -depth 2 g.gray
hd g.gray
convert -depth 8 -size 10x2 f.gray -depth 2 g.gray
hd g.gray
convert -depth 8 -size 20x1 f.gray -depth 2 g.gray
hd g.gray

我们创建了一个位1 0重复 10 次的输入文件。转换为 2 位深度给出:

00000000  c0 00 c0 00 c0 00 c0 00  c0 00 c0 00 c0 00 c0 00  |................|
*
00000014

00000000  c0 c0 c0 c0 c0 c0 c0 c0  c0 c0                    |..........|
0000000a

00000000  cc cc c0 cc cc c0                                 |......|
00000006

00000000  cc cc cc cc cc                                    |.....|
00000005

因此,似乎如果深度 < 8,则 ImageMagick 逐行运行,0 填充缺失位。

I have tested with 1-bit per pixel, and this theory was consistent.

Tested with ImageMagick 6.7.7-10, Ubuntu 14.04.

于 2015-09-28T13:09:00.147 回答