使用Golang将原始图像[]byte转换为image.Image

10

假设我有一张8位灰度图像,如下所示:

var pixels []byte = ...
width := 100
height := 100

我该如何将其转换成实现image.Image接口的内容?

1个回答

12

image包中有多种实现image.Image接口的方法。

如果你可以找到一个像你所拥有的像素一样的实现,就不需要做任何事情,只需使用该实现即可。

例如,image包就有一个image.Gray类型,它实现了image.Image并使用一个字节来模拟8位灰度颜色的像素。

因此,如果您恰好拥有这个实现,只需创建一个image.Gray值,并“告诉它”使用您的pixels

pixels := make([]byte, 100*100) // slice of your gray pixels, size of 100x100

img := image.NewGray(image.Rect(0, 0, 100, 100))
img.Pix = pixels

注意 #1:

请注意,我使用了image.NewGray()函数,它会返回一个初始化后的值image.Gray,因此我们只需要设置/更改像素数组。由于image.Gray是具有公开字段的结构体,我们也可以通过手动初始化其所有字段来创建它:

img := &image.Gray{Pix: pixels, Stride: 100, Rect: image.Rect(0, 0, 100, 100)}

(请注意,我使用了指针,因为只有*image.Gray实现了image.Image,因为方法是使用指针接收器定义的。 image.NewGray()也返回一个指针。)
注2: 在我们的示例中,我们设置了要由图像使用的pixels切片。现在,图像已绑定到此切片。如果我们更改其中任何内容,则Image.At()返回的像素也会更改(它们使用相同的源)。如果您不想要这个,可以将像素复制到Gray.Pix切片中,如下所示:
img := image.NewGray(image.Rect(0, 0, 100, 100))
copy(img.Pix, pixels)

请在Go Playground上尝试这些示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接