【发布时间】:2017-03-08 21:52:52
【问题描述】:
我正在使用 golang 从视频游戏控制台读取帧缓冲区 - 缓冲区的格式为 BRGA(然后我将其转换为 RGBA)。当我将信息传递到 Go PNG 编码器时,出来的图像无效。我正在使用的代码是 - 其中:
其中
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
【问题讨论】:
-
我希望原始数据的大小为:1270*720*4 == 3657600 字节。提供的二进制转储的大小为 3768320(或您提到的 0x398000)。您确定提供的数据实际上只是原始像素值吗?
-
转储的长度是 Xbox 给出的
framebuffersize。 -
您能否提供有关如何获取数据转储的更多信息?如果它是原始 RGBA 像素值,您的代码应该可以工作。
-
我通过 TCP 将命令
screenshot发送到控制台,它返回响应203- binary response follows,然后是正文:pitch=0x width=0x height=0x format=0x offsetx=0x offsety=0x, framebuffersize=0x sw=0x sh=0x colorspace=0x。我使用该信息读取响应的其余部分并将其解调为正确的像素格式。