From c25b65a5f6f9fa022a644fb47f148497c5a52c5f Mon Sep 17 00:00:00 2001 From: potassium Date: Mon, 2 Mar 2026 22:22:02 +0300 Subject: [PATCH] grayscale converter example --- pkg/grayscale/main.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pkg/grayscale/main.go diff --git a/pkg/grayscale/main.go b/pkg/grayscale/main.go new file mode 100644 index 0000000..ad851fe --- /dev/null +++ b/pkg/grayscale/main.go @@ -0,0 +1,41 @@ +package main + +import ( + "image" + "image/color" + "image/png" + "os" +) + +// processImage takes input png image from stdin, processes it with f and outputs it to stdout. +func processImage(f func(image.Image) image.Image) error { + img, err := png.Decode(os.Stdin) + if err != nil { + return err + } + err = png.Encode(os.Stdout, f(img)) + if err != nil { + return err + } + return err +} + +type convert struct { + image.Image + color.Model +} + +func (c convert) ColorModel() color.Model { return c.Model } +func (c convert) Bounds() image.Rectangle { return c.Image.Bounds() } +func (c convert) At(x, y int) color.Color { return c.Model.Convert(c.Image.At(x, y)) } + +func grayscale(img image.Image) image.Image { + return convert{img, color.GrayModel} +} + +func main() { + err := processImage(grayscale) + if err != nil { + panic(err) + } +}