का उपयोग कर एक तस्वीर के स्वैप पीएनजी चैनल मैं एक छोटा लिखने की कोशिश कर रहा हूं, जो एक पीएनजी फ़ाइल पढ़ेगा, और एक चैनल को दूसरे (आर, जी, बी) के साथ स्वैप करेगा संभावित विकल्पगोलांग - छवि और छवि/पीएनजी
हालांकि, मुझे रंग से पूर्णांक निकालने का तरीका नहीं पता है। छवि वस्तु द्वारा लौटाया गया ऑब्जेक्ट। (X, y)। इसे वापस लिखना शायद छवि के साथ आसान होगा। सेट (एक्स, वाई, रंग) एक बार मैं स्वैप किए गए चैनलों के साथ नया आरजीबीए रंग बना सकता हूं।
यहाँ मैं अब (आप काफी पिछले पाश करने के लिए छोड़ सकते हैं) हूँ:
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 ????
}
}
}
मैं वास्तव में नए जाने के लिए और प्रोग्रामिंग सामान्य रूप में है, तो आपका जवाब में यह विचार करें हूँ। धन्यवाद।
मैं आरजीबीए पीएनजी छवियों का उपयोग कर रहा हूं (वे ब्लेंडर 3 डी से निर्यात किए गए सामान्य मानचित्र हैं)। – Zoltan