去绘制图像蒙版

时间:2017-09-20 21:16:35

标签: image go draw

我正在尝试使用模板绘制图像,模板图像如下

enter image description here

我想用自定义颜色为图像着色红色,绿色,蓝色和黄色,并实现以下目标:

enter image description here

为了达到这个目的,我目前使用这个图像作为基础

enter image description here

然后使用draw.Draw(outfitImage, outfitImage.Bounds(), generatorImage, image.ZP, draw.Over)

绘制模板

然而,这给出了一个非常奇怪的结果(没有接近预期结果),这就是我如何替换像素

func paintPixels(img *image.NRGBA, base color.Color, dst color.Color) {
    br, bg, bb, ba := base.RGBA()
    dr, dg, db, _ := dst.RGBA()
    for x := 0; x < img.Bounds().Dx(); x++ {
        for y := 0; y < img.Bounds().Dy(); y++ {
            r, g, b, a := img.At(x, y).RGBA()
            if br == r && bg == g && bb == b && ba == a {
                img.Set(x, y, color.RGBA{uint8(dr), uint8(dg), uint8(db), 255})
            }
        }
    }
}

enter image description here

结果可能会根据我在着色图像模板时使用的Alpha值而有所不同。所以我想不出一种方法来实现预期的结果,我想我应该使用draw.DrawMask的掩码,但我不知道从哪里开始或如何实现我正在寻找的结果

1 个答案:

答案 0 :(得分:1)

如果所有组件都匹配,您看起来只是用颜色替换像素。如果你看一下bild/blend中的合成方法,你应该找到一个适合你组合图像的方法 - 你可能想要Opacity或Multiply模式,并且可以从这个文件中提取代码:

https://github.com/anthonynsimon/bild/blob/master/blend/blend.go