CF_BITMAP 无 GlobalSize? 使用 GetDIBits 和 memcpy 保存位图数据
如果您不能使用 GlobalSize 函数来获取位图的大小,可以通过以下方法来保存位图数据:
- 使用 GetDIBits 函数来获取位图的相关信息,包括位图数据的大小。
- 使用 malloc 函数动态分配足够大小的内存来保存位图数据。
- 使用 GetDIBits 函数再次获取位图数据,并将其保存到分配的内存中。
- 使用 memcpy 函数将分配的内存中的位图数据复制到所需的位置。
以下是一个示例代码:
BITMAPINFO bmi;
BITMAPINFOHEADER* bmih;
BYTE* bits;
// 获取位图信息
GetDIBits(hdc, hBitmap, 0, 0, NULL, &bmi, DIB_RGB_COLORS);
// 获取位图数据大小
bmih = &(bmi.bmiHeader);
DWORD dataSize = bmih->biSizeImage;
// 分配内存保存位图数据
bits = (BYTE*)malloc(dataSize);
// 获取位图数据
GetDIBits(hdc, hBitmap, 0, bmih->biHeight, bits, &bmi, DIB_RGB_COLORS);
// 将位图数据复制到所需位置
memcpy(dest, bits, dataSize);
// 释放分配的内存
free(bits);
在上述代码中,hdc 是位图的设备上下文句柄,hBitmap 是位图的句柄,dest 是目标位置的指针。请将代码中的 hdc、hBitmap 和 dest 替换为您实际使用的值。
原文地址: https://www.cveoy.top/t/topic/qgYM 著作权归作者所有。请勿转载和采集!