将RGBA图像保存为8位灰度单色图像

问题描述 投票:0回答:1

背景

我有这段代码可以将 RGBA 图像作为 PNG 文件写入磁盘。它适用于普通 RGBA 图像,其中每个像素都有

4
字节的信息用于其
4
RGBA 组件。


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
字节与
1
字节

RGBA 与 8 位单色

我手动修改了 RGBA 图像的像素缓冲区,以便每个像素只有一个与其关联的

1
字节,并且
1
字节仅包含 RGBA 的 R 分量。我如何修改上面的代码,以便我修改后的图像可以保存到磁盘并正确可视化为 8 位灰度单色,如下所列:

https://en.wikipedia.org/wiki/List_of_monochrome_and_RGB_color_formats

image go grayscale rgba monochrome
1个回答
0
投票

根据 @Volker 的建议,我切换到

image.Gray
为每个像素仅存储
1
字节。这看起来是标准方法。

© www.soinside.com 2019 - 2024. All rights reserved.