去画图像蒙版
Go draw over image mask
我正在尝试使用模板绘制图像,模板图像如下
我想用自定义颜色为图像着色红色、绿色、蓝色和黄色,并实现如下效果:
为了实现这一点,我目前使用这张图片作为基础
然后使用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})
}
}
}
}
结果可能因我为图像模板着色时使用的 alpha 值而异。所以我想不出一种方法来达到预期的结果,我想我应该使用带有 draw.DrawMask
的掩码,但我不知道从哪里开始或如何实现我正在寻找的结果
如果所有组件都匹配,您看起来只是用颜色替换像素。如果您查看 bild/blend 中的合成方法,您应该会找到适合您组合图像的方法 - 您可能需要不透明度或正片叠底模式,并且可以从此文件中提取代码:
https://github.com/anthonynsimon/bild/blob/master/blend/blend.go
我正在尝试使用模板绘制图像,模板图像如下
我想用自定义颜色为图像着色红色、绿色、蓝色和黄色,并实现如下效果:
为了实现这一点,我目前使用这张图片作为基础
然后使用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})
}
}
}
}
结果可能因我为图像模板着色时使用的 alpha 值而异。所以我想不出一种方法来达到预期的结果,我想我应该使用带有 draw.DrawMask
的掩码,但我不知道从哪里开始或如何实现我正在寻找的结果
如果所有组件都匹配,您看起来只是用颜色替换像素。如果您查看 bild/blend 中的合成方法,您应该会找到适合您组合图像的方法 - 您可能需要不透明度或正片叠底模式,并且可以从此文件中提取代码:
https://github.com/anthonynsimon/bild/blob/master/blend/blend.go