Golang读取PNG图片像素RGB颜色值异常如何解决
问题原因
你的像素读取逻辑存在遍历判断错误:image.RGBA的Pix数组按[R, G, B, A, R, G, B, A...]的顺序存储像素值,每4个元素对应一个像素。你当前使用if idx%4 == 0作为颜色转换的触发条件,此时仅完成了当前像素R通道的赋值,G、B、A三个通道还未更新,实际拼接的是上一个像素的后三个通道值+当前像素的R通道值,所以输出结果完全不符合预期。
修复方案
把main函数里的遍历逻辑修改为以下两种写法任意一种即可:
写法1:修改判断触发条件
rgbaIdx := 0 for idx, colorVal := range rgbaArr.Pix { rgba[rgbaIdx] = colorVal rgbaIdx += 1 // 每攒够4个值(索引到4的倍数减1时)再做转换 if idx%4 == 3 { rgbaIdx = 0 hexArr = append(hexArr, rgbaToCssColor(&rgba, true)) } }
写法2:按步长遍历(更简洁不易出错)
直接按4个元素为步长遍历Pix数组,无需额外计数变量:
var hexArr = make([]string, 0, len(rgbaArr.Pix)/4) for i := 0; i < len(rgbaArr.Pix); i += 4 { rgba := [4]uint8{ rgbaArr.Pix[i], rgbaArr.Pix[i+1], rgbaArr.Pix[i+2], rgbaArr.Pix[i+3], } hexArr = append(hexArr, rgbaToCssColor(&rgba, true)) }
内容的提问来源于stack exchange,提问作者rodpadev
相关产品推荐
相关产品推荐

