Golang-使用Image和Image / PNG交换图片的PNG通道

我正在尝试编写一个简短的文件,它将读取一个PNG文件,并与另一个(R,G,B)交换一个通道是可能的选择。


但是我不知道如何从image.At(x,y)返回的color.Color对象中提取整数。一旦我可以使用交换的通道构造新的RGBA颜色,使用image.Set(x,y,color)写回它可能会更容易。


我现在在这里(您几乎可以跳到最后一个循环):


package main


import (

"flag"

"fmt"

//"image"

"image/color"

"image/png"

"os"

)


type Choice struct {

value string

valid 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 string

var c1 Choice

var c2 Choice


flag.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语言和编程技术的新手,所以请在回答中考虑一下。谢谢你。


潇潇雨雨
浏览 321回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go