如何写入 Go 中的 DIBits 结构?

How do I write to a DIBits structure in Go?

我正在使用 w32 库来使用 Go 语言进行窗口化。我不太确定如何处理 unsafe.Pointer 以允许我开始在像素缓冲区中设置像素值。

我使用 unsafe.Pointer,因为这是 w32 库希望我在 CreateDIBSection 函数中传递的内容。

var p unsafe.Pointer
bitmap := w32.CreateDIBSection( srcDC, &bmi, w32.DIB_RGB_COLORS, &p, w32.HANDLE(0), 0 )

该代码成功并为我提供了指向存储 DIBBit 的内存位置的指针。我如何使用它来写入值?

p[idx] = 0xff

会给我一个错误type unsafe.Pointer does not allow indexing。我已经阅读了 unsafe.Pointer 上的相关文档,但无法弄清楚如何将其视为我可以写入的字节缓冲区。

我是 Go 的新手,已经在 gobyexample.com 上完成了很多示例,但无法弄清楚。

这只是将 unsafe.Pointer 以正确的方式转换回数组(可索引)的问题。

在尝试了各种转换之后,这是有效的(假设 widhgt 都声明为 const):

pixels := (*[wid*hgt*4]uint8)(ptr)

然后我可以通过以下方式更改它们:

pixels[(y*wid+x)*4+0] = 0x00 // Blue
pixels[(y*wid+x)*4+1] = 0x00 // Green
pixels[(y*wid+x)*4+2] = 0x00 // Red