生成 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/bmpEncode()在任何图像模式下都不支持bpp=1

应该很容易从Encode() 中提取片段并将您自己的专用编码函数编写为 BMP 文件格式,并且它的所有变体都有很好的文档记录。 BMP 文件格式规范:Wikipedia 或 FileFormat。

【讨论】:

以上是关于生成 1 位深度的 BMP 图像的主要内容,如果未能解决你的问题,请参考以下文章

使用位深度来确定 BMP 图像中颜色表的大小是不是有效?

生成 BMP 图像的预览

matlab图像处理篇--生成8bit深度图像

图像BMP格式介绍

bmp 和JPG有啥区别

数据恢复培训资料:BMP文件详解