【发布时间】:2020-06-03 02:47:35
【问题描述】:
var bitmap win.BITMAP
win.GetObject(win.HGDIOBJ(hBitmap), unsafe.Sizeof(bitmap), unsafe.Pointer(&bitmap))
var bmpInfo win.BITMAPINFO
bmpInfo.BmiHeader.BiSize = uint32(unsafe.Sizeof(Info.BmiHeader))
....................Width = width
....................Height = height
....................Planes = 1
....................BitCount = 24
....................Compression = win.BI_RGB
var hdc win.HDC
hdc = win.GetDC(0)
win.GetDIBits(hdc, bitmap, 0, uint32(bitmap.BmHeight), bitmapInfo, nil, 0)
pBits := make([]byte, imageSize)
win.GetDIBits(hdc, bitmap, 0, uint32(bitmap.BmHeight), bitmapInfo, (*byte)(unsafe.Pointer(&pBits)), 0)
使用包github.com/lxn/win
首先,我们已经完成了获取GetDIBits函数之前的所有工作。
之后,我终于尝试使用GetDIBits函数获取图像数据,但总是返回0。
我将 pBits 的数据类型更改为 'unsafe.Pointer' 或 '* byte' 并尝试过,但它返回 nil 或 0。
如何从 GetDIBits 函数中获取图像数据?
【问题讨论】:
-
猜测您正在使用
github.com/lxn/win(请指定用于避免猜测的包)。在这种情况下,请尝试将&pBits[0]传递给函数(有关更多信息,请参阅 this question)。 -
@Brits 包在文中指定。我按照你告诉我的方式试了一下,所以值为0。
-
感谢您更新问题;不幸的是,如果没有进一步的信息,任何进一步的建议都是猜测。你能添加minimal reproducible example吗?
-
我同意英国人的观点,你可以先提供一个我们测试的例子。如果你有兴趣,这里有一个类似的C++case供你参考。
-
@Brits 更新内容!!