Golang将raw image [] byte转换为image.Image

时间:2016-07-18 13:48:51

标签: image go

假设我有一个像这样的8位灰度图像:

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

如何将其转换为实现image.Image的内容?

1 个答案:

答案 0 :(得分:7)

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上尝试这些示例。