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

Tim*_*mmm 9 image go

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

var pixels []byte = ...
width := 100
height := 100
Run Code Online (Sandbox Code Playgroud)

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

icz*_*cza 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
Run Code Online (Sandbox Code Playgroud)

注意#1:

请注意,我使用image.NewGray()了返回初始化值image.Gray,因此我们只需要设置/更改像素切片.由于image.Gray是包含导出字段的结构,我们还可以通过手动初始化其所有字段来创建它:

img := &image.Gray{Pix: pixels, Stride: 100, Rect: image.Rect(0, 0, 100, 100)}
Run Code Online (Sandbox Code Playgroud)

(注意我使用了一个指针,因为只有*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)
Run Code Online (Sandbox Code Playgroud)

Go Playground上试试这些例子.