【问题标题】:Golang convert raw image []byte to image.ImageGolang 将原始图像 []byte 转换为 image.Image
【发布时间】:2016-10-08 07:56:38
【问题描述】:

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

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

如何将其转换为实现 image.Image 的东西?

【问题讨论】:

    标签: image go


    【解决方案1】:

    image 包有多个image.Image 接口的实现。

    如果您能找到一个可以按照您的方式对像素进行建模的实现,那么您无需执行任何操作,只需使用该实现即可。

    例如,image 包有一个实现image.Imageimage.Gray 类型,它用一个字节为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 上尝试这些示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 2015-06-04
      • 2014-10-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多