Go语言中无法将Color数组作为color.Palette传入image.NewPaletted的问题
问题原因与解决方法
核心原因
Go语言中数组和切片是完全不同的类型:
color.Palette的定义是type Palette []color.Color,本质是color.Color类型的切片- 你声明的
[256]color.Color是固定长度的数组类型,即便数组长度和切片元素数量一致,两者的类型依然不匹配 - Go是强类型语言,不同类型的变量不能直接互相赋值或作为参数传递,这就是报错的根本原因
解决方法
只需要把固定大小的数组转换成切片即可,语法是在数组变量后加上[:],这会生成一个指向数组全部元素的切片,类型为[]color.Color,完全符合color.Palette的要求。
示例代码:
// 声明固定大小的数组 var palette [256]color.Color // 逐个赋值数组元素... // 将数组转为切片传入函数 img := image.NewPaletted(image.Rect(0, 0, width, height), palette[:])
哪怕数组大小改为2,只要还是数组类型,就必须转成切片才能被image.NewPaletted接受——因为函数参数要求的是切片类型,而非数组类型。
内容的提问来源于stack exchange,提问作者cassm
相关产品推荐
相关产品推荐

