我正在尝试从眼动仪结果中创建热力图(显示用户最常看的屏幕区域)。
对于用户经常关注的像素,我想设置不透明的红色,对于稍微不那么频繁的橙色等颜色。我使用红到绿的渐变色来表示。但是对于最少被关注的像素,我不仅希望它们显示绿色,还希望它们是透明的。
imgfile, err := os.Open("unchanged.jpeg")
defer imgfile.Close()
if err != nil {
fmt.Println(err.Error())
}
decodedImg, err := jpeg.Decode(imgfile)
img := image.NewRGBA(decodedImg.Bounds())
size := img.Bounds().Size()
for x := 0; x < size.X; x++ {
for y := 0; y < size.Y; y++ {
img.Set(x, y, decodedImg.At(x, y))
}
}
// I change some pixels here with img.Set(...)
outFile, _ := os.Create("changed.png")
defer outFile.Close()
png.Encode(outFile, img)
问题是当我尝试改变颜色时,例如使用
img.Set(x,y,color.RGBA {85,165,34,50})
,它实际上并没有根据旧颜色和新颜色的平均值着色像素,而只显示一些新的、看起来奇怪的颜色。
alpha RGBA 值设置为 50 的图像:(透明)
alpha RGBA 值设置为 255 的图像:(不透明)
我使用 png 图像,据我所知,它支持透明度。
这是为什么?有什么方法可以解决这个问题,并使最不常见的像素显现为透明吗?感谢每一个答案。