我正在尝试编写一个简短的文件,它将读取一个PNG文件,并与另一个(R,G,B)交换一个通道是可能的选择。但是我不知道如何从image.At(x,y)返回的color.Color对象中提取整数。一旦我可以使用交换的通道构造新的RGBA颜色,使用image.Set(x,y,color)写回它可能会更容易。我现在在这里(您几乎可以跳到最后一个循环):package mainimport ("flag""fmt"//"image""image/color""image/png""os")type Choice struct {value stringvalid bool}func (c *Choice) validate() {goodchoices := []string{"R", "G", "B"}for _, v := range goodchoices { if c.value == v { c.valid = true }}}func main() {var fname stringvar c1 Choicevar c2 Choiceflag.StringVar(&c1.value, "c1", "", "The color channel to swap - R or G or B ")flag.StringVar(&c2.value, "c2", "", "The color channel to swap with - R or G or B ")flag.StringVar(&fname, "f", "", "A .png image (normal map)")flag.Parse()c1.validate()c2.validate()if c1.valid == true && c2.valid == true { fmt.Println("We could proceed..") fmt.Println("Swapping channels:", c1.value, "<->", c2.value, "In", fname) //for testing} else { fmt.Println("Invalid channel... Please use R, G or B.") return}file, err := os.Open(fname)if err != nil { fmt.Println(err) return}defer file.Close()pic, err := png.Decode(file)if err != nil { fmt.Fprintf(os.Stderr, "%s: %v\n", fname, err) return}b := pic.Bounds()for y := b.Min.Y; y < b.Max.Y; y++ { for x := b.Min.X; x < b.Max.X; x++ { col := pic.At(x, y) ???? How do I swap the channels in col ???? }}}我真的是Go语言和编程技术的新手,所以请在回答中考虑一下。谢谢你。
1 回答
- 1 回答
- 0 关注
- 320 浏览
添加回答
举报
0/150
提交
取消