I have this code to write to disk an RGBA image as a PNG file. It works just fine for the ordinary RGBA image for which each pixel has 4
bytes of info for its 4
RGBA component.
import (
"bufio"
"image"
"image/png"
"os"
)
// SaveToPngFile create and save an image to a file using PNG format
func SaveToPngFile(filePath string, m image.Image) error {
// Create the file
f, err := os.Create(filePath)
if err != nil {
return err
}
defer f.Close()
// Create Writer from file
b := bufio.NewWriter(f)
// Write the image into the buffer
err = png.Encode(b, m)
if err != nil {
return err
}
err = b.Flush()
if err != nil {
return err
}
return nil
}
4
bytes vs 1
byteI have manually modified the pixel buffer of my RGBA image so that each pixel has only a 1
byte associated with it and the 1
byte only contains the R component of the RGBA. How can I modify the above code, so that my modified image can be saved to disk and visualized properly as an 8-bit grayscale monochrome like the one listed here:
https://en.wikipedia.org/wiki/List_of_monochrome_and_RGB_color_formats
As recommended by @Volker, I'm switching to image.Gray
to store only 1
byte for each pixel. That looks like to be the standard approach.