2017-06-26 80 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