PNG编码生成损坏的图像

时间:2017-02-11 02:53:43

标签: image go png

我正在使用golang从视频游戏控制台读取帧缓冲 - 缓冲区的格式为BRGA(然后我将其转换为RGBA)。当我将信息传递到Go PNG编码器时,出来的图像无效。我使用的代码是 - where:

  

其中data是一片RGBA像素 - 长度为0x398000,pitch为5120,width为1270,height为720)

img := &image.RGBA{
    Pix:    data,
    Stride: pitch,
    Rect:   image.Rect(0, 0, width, height),
}

os.Remove("./img.png")
file, _ := os.Create("./img.png")
defer file.Close()
filewriter := bufio.NewWriter(file)
if err := png.Encode(filewriter, img); err != nil {
    panic(err)
}

预期结果将是:xbox

但实际结果是(仅在Windows上呈现或在Chrome中查看时...很奇怪):sad xbox

我已经上传了RGBA切片的二进制转储(如果有人想要的话) - https://1drv.ms/u/s!Ak-aZ3z7Ea8KwvUsqdP5OgWpZqxsGA

2 个答案:

答案 0 :(得分:0)

你不是在冲刷缓冲的作家。你应该这样做:

filewriter := bufio.NewWriter(file)
defer filewriter.Flush()

完成此修复后,我会得到一张有效的图片:

image produced by program

答案 1 :(得分:0)

不是解决方案,我想发表评论但由于声誉还不能,但会增加Mac OS的差异。

MacOS部分问题似乎是新的,出现在最新的10.12.3更新或Safari的某些内容之后。我还没有缩小来源。但是,有一些关于Mac系统如何对图像进行编码/解码的新内容,导致它变得透明或灰色。我所处的项目在过去的几个星期里也遇到了这个问题,我还在调查它崩溃的地方。