8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

不能将颜色数组用作 image.NewPaletted 参数中的 color.Palette 值

shenaniganss 2月前

24 0

我目前正在尝试创建一个图像,其中调色板从已知尺寸的 png 文件的第一行读取。我通过声明一个已知大小的颜色数组来实现这一点,然后设置

我目前正在尝试创建一个图像,其中调色板从已知尺寸的 png 文件的第一行读取。我通过声明一个 Color 已知大小的数组,然后分别设置该数组中的条目,然后将该数组 image.NewPaletted 作为调色板参数传递进去来实现这一点。我从 Donovan & Kernighan 的例子中知道以下内容有效:

var palette = []color.Color{color.White, color.Black}
rect := image.Rect(0, 0, 200, 200)
img := image.NewPaletted(rect, palette)

...但以下在我的代码中不起作用(我已经检查了错误 os.Open png.Decode 为了简洁起见省略了这一点):

file, _ := os.Open("palette.png")
img, _ := png.Decode(file)

// image width is guaranteed to == paletteSize
var palette [paletteSize]color.Color
for i := range(paletteSize) {
    palette[i] = img.At(i, 0)
}

rect := image.Rect(0, 0, 200, 200)
img := image.NewPaletted(rect, palette)

失败了 cannot use palette (variable of type [256]color.Color) as color.Palette value in argument to image.NewPaletted 。值得注意的是, 文档 显示 color.Palette 定义为 type Palette []Color .

感觉这两个数组应该是等价的,因为它们的大小显然都是已知的,只是初始化方式不同,但显然我错过了一些东西。我尝试将其减少 paletteSize 到 2,但仍然会抛出相同的错误,所以我认为这不是数组大小的问题。有人知道我做错了什么吗?

帖子版权声明 1、本帖标题:不能将颜色数组用作 image.NewPaletted 参数中的 color.Palette 值
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由shenaniganss在本站《go》版块原创发布, 转载请注明出处!
最新回复 (0)
  • [256]color.Color 是一个 数组 ,而 color.Palette 定义为 type Palette []Color ,所以 是一个 切片 。这意味着您正在尝试将数组传递给需要切片的函数;错误会让您知道不支持此功能。

    您有几个选择;最小的变化是使用 image.NewPaletted(rect, palette[:]) (这将创建一个使用数组作为底层缓冲区 ref )。或者,您也可以只使用切片:

    func main() {
        file, _ := os.Open("palette.png")
        img, _ := png.Decode(file)
    
        paletteSize:= 256
        palette := make([]color.Color, paletteSize)
        for i := range paletteSize {
            palette[i] = img.At(i, 0)
        }
    
        rect := image.Rect(0, 0, 200, 200)
        _ = image.NewPaletted(rect, palette)
    }
    
返回
作者最近主题: