2017-06-26 79 views
0

我正在使用w32库来允许我使用Go语言进行窗口化。我不太确定如何处理unsafe.Pointer,这将允许我开始设置像素缓冲区中的像素值。如何在Go中写入DIBits结构?

我使用unsafe.Pointer,因为这就是w32库期望我在CreateDIBSection函数中传递的值。

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

该代码成功,给了我一个指针,它指向DIBBits存储在存储器中的位置。我怎样才能使用它来编写值?

p[idx] = 0xff 

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

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

回答

1

这只是一个将不安全的指针转换回数组(可索引)的正确方法。

尝试不同的类型转换之后,这是工作的一个(假设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