var m *image.RGBA = out.(*image.RGBA)
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
for x := bounds.Min.X; x < bounds.Max.X; x++ {
m.Set(x, y, im.At(x, y))
f(index, x, y, im, out)
index += 1
}
}
return out, nil
}
//conert any color to RABGA color.
func readRGBAColor(from_color color.Color) color.RGBA {
return color.RGBAModel.Convert(from_color).(color.RGBA)
}
//only write to jpeg formats.
func WriteImage(path string, im image.Image) error {
out, err := os.OpenFile(path, os.O_CREATE, os.ModePerm)
defer out.Close()
if err != nil {
return err
}
err = png.Encode(out, im)
if err != nil {
return err
}
return nil
}
var read_in string
var write_out string
var data string
func init() {
flag.StringVar(&read_in, "in", "", "image path read in.")
flag.StringVar(&write_out, "out", "out.jpg", "image path write out.")
flag.StringVar(&data, "data", "", "data to shadow.")
}
func errHandle(err error) {
if err != nil {
log.Fatal(err)
}
}
func main() {
flag.Parse()
if read_in == "" {
fmt.Println("Options:")
flag.PrintDefaults()
return
}
im, err := OpenImage(read_in)
errHandle(err)
if data != "" {
out, err := WriteShadow([]byte(data), im)
errHandle(err)
err = WriteImage(write_out, out)
errHandle(err)
} else {
head, err := ReadShadowHeader(im)
errHandle(err)
_flag := ReadShadowFlag(head)
if _flag != FLAG {
fmt.Println("image doesn't have shadow data.")










