生成 1 位深度的 BMP 图像
Posted
技术标签:
【中文标题】生成 1 位深度的 BMP 图像【英文标题】:Generate 1 bit depth BMP image 【发布时间】:2021-01-25 11:45:33 【问题描述】:我需要创建一个颜色深度为1位的单色位图图像,例如:
$ file exampleMono.bmp
> exampleMono.bmp: PC bitmap, Windows 3.x format, 640 x 1000 x 1
在 Go 中,我可以使用以下内容生成简单的 bmp 图像:
tempPal := color.Palette([]color.Color
color.Black, color.White,
)
img := image.NewPaletted(image.Rect(640, 1000,0,0), tempPal)
filename := fmt.Sprintf("img-%d.bmp", time.Now().Unix())
file, _ := os.Create(filename)
bmp.Encode(file, img)
file.close
但是,生成的 bmp 文件的颜色深度为 8 位。
$ file img-1611574755.bmp
> img-1611574755.bmp: PC bitmap, Windows 3.x format, 640 x 1000 x 8
我查看了 Go 中的 bmp、image 和 draw 包,但没有发现任何可以将颜色深度设置为 1 位的功能。是否有可能在 Go 中实现我所需要的,如果可以,如何实现?
【问题讨论】:
仅供参考,如果你想生成任何这样的东西进行测试,你可以在终端中使用 ImageMagick,例如magick -size 64x48 gradient: -type bilevel image.bmp
或者如果您想将 PNG 或 JPEG 转换为一个,magick input.png -type bilevel output.bmp
【参考方案1】:
正如您从here 向下看到的那样; golang.org/x/image/bmp
的Encode()
在任何图像模式下都不支持bpp=1
。
应该很容易从Encode()
中提取片段并将您自己的专用编码函数编写为 BMP 文件格式,并且它的所有变体都有很好的文档记录。 BMP 文件格式规范:Wikipedia 或 FileFormat。
【讨论】:
以上是关于生成 1 位深度的 BMP 图像的主要内容,如果未能解决你的问题,请参考以下文章