首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GetDIBits函数

如何使用GetDIBits函数
EN

Stack Overflow用户
提问于 2020-02-19 01:32:34
回答 1查看 277关注 0票数 0
代码语言:javascript
复制
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‘或'*字节’,并尝试了它,但它返回了0或0。

如何从GetDIBits函数中获取图像数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 03:56:47

我对Go语言不太了解,但是当您使用GetDIBits时,参数的位置是不正确的。

lpvBits

指向缓冲区的指针,用于接收位图数据。如果此参数为NULL,则函数将位图的尺寸和格式传递给lpbi参数所指向的BITMAPINFO结构。

lpbmi

指向BITMAPINFO结构的指针,该结构指定DIB数据的所需格式。

您可以这样修改它:

代码语言:javascript
复制
win.GetDIBits(hdc, bitmap, 0, uint32(bitmap.BmHeight), nil, bitmapInfo, 0)
pBits := make([]byte, imageSize)

win.GetDIBits(hdc, bitmap, 0, uint32(bitmap.BmHeight), (*byte)(unsafe.Pointer(&pBits)), bitmapInfo, 0)

参考:Using GetDIBits to load a bitmap

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60291774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档