diff options
Diffstat (limited to 'cmd/ff-primitive/main.go')
| -rw-r--r-- | cmd/ff-primitive/main.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/cmd/ff-primitive/main.go b/cmd/ff-primitive/main.go new file mode 100644 index 0000000..3ee0882 --- /dev/null +++ b/cmd/ff-primitive/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "flag" + "image" + "log" + "os" + "runtime" + "runtime/pprof" + + "github.com/Xe/x/internal" + "github.com/fogleman/primitive/primitive" + farbfeld "github.com/hullerob/go.farbfeld" +) + +var ( + shapeCount = flag.Int("count", 150, "number of shapes used") + repeatShapeCount = flag.Int("repeat-count", 0, "number of extra shapes drawn in each step") + alpha = flag.Int("alpha", 128, "alpha of all shapes") + cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") +) + +func stepImg(img image.Image, count int) image.Image { + bg := primitive.MakeColor(primitive.AverageImageColor(img)) + model := primitive.NewModel(img, bg, 512, runtime.NumCPU()) + + for range make([]struct{}, count) { + model.Step(primitive.ShapeTypeTriangle, *alpha, *repeatShapeCount) + } + + return model.Context.Image() +} + +func main() { + internal.HandleStartup() + + if *cpuprofile != "" { + f, err := os.Create(*cpuprofile) + if err != nil { + log.Fatal(err) + } + pprof.StartCPUProfile(f) + defer pprof.StopCPUProfile() + } + + img, err := farbfeld.Decode(os.Stdin) + if err != nil { + log.Fatal(err) + } + + err = farbfeld.Encode(os.Stdout, stepImg(img, *shapeCount)) + if err != nil { + log.Fatal(err) + } +} |
