我正在使用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)
}
但实际结果是(仅在Windows上呈现或在Chrome中查看时...很奇怪):
我已经上传了RGBA切片的二进制转储(如果有人想要的话) - https://1drv.ms/u/s!Ak-aZ3z7Ea8KwvUsqdP5OgWpZqxsGA
答案 0 :(得分:0)
你不是在冲刷缓冲的作家。你应该这样做:
filewriter := bufio.NewWriter(file)
defer filewriter.Flush()
完成此修复后,我会得到一张有效的图片:
答案 1 :(得分:0)
不是解决方案,我想发表评论但由于声誉还不能,但会增加Mac OS的差异。
MacOS部分问题似乎是新的,出现在最新的10.12.3更新或Safari的某些内容之后。我还没有缩小来源。但是,有一些关于Mac系统如何对图像进行编码/解码的新内容,导致它变得透明或灰色。我所处的项目在过去的几个星期里也遇到了这个问题,我还在调查它崩溃的地方。