代码之家  ›  专栏  ›  技术社区  ›  Octopus

如何在Go中写入DIBits结构?

  •  0
  • Octopus  · 技术社区  · 7 年前

    unsafe.Pointer 这将允许我开始在像素缓冲区中设置像素值。

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

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

    该代码成功,并为我提供了一个指向存储二进制位的内存位置的指针。我如何使用它来写值?

    p[idx] = 0xff
    

    会给我一个错误 type unsafe.Pointer does not allow indexing .我已经阅读了关于不安全的相关文件。指针,但不知道如何将其视为可以写入的字节缓冲区。

    gobyexample.com ,但无法解决这个问题。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Octopus    7 年前

    这只是一个铸造不安全的问题。以正确的方式返回到数组(可索引)的指针。

    在尝试了各种类型后,这是一个有效的方法(假设 wid hgt 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