使用 GetClipboardData 获取 CF_BITMAP 数据并保存到 byte 数组
如果您使用 GetClipboardData 函数获取了 CF_BITMAP 格式的数据,并且想要将数据保存到 byte 数组中,您可以使用以下步骤:
-
使用 GetClipboardData 函数获取 CF_BITMAP 格式的数据,并将返回的句柄存储在一个变量中,例如 hBitmap。
-
使用 GetObject 函数获取位图对象的信息,将返回的 BITMAP 结构体存储在一个变量中,例如 bitmap。
BITMAP bitmap;
GetObject(hBitmap, sizeof(BITMAP), &bitmap);
- 计算位图数据的大小,即字节数。
int dataSize = bitmap.bmWidthBytes * bitmap.bmHeight;
- 使用 GlobalAlloc 函数分配足够大小的内存,将返回的内存块句柄存储在一个变量中,例如 hData。
HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, dataSize);
- 使用 GlobalLock 函数锁定内存块,并将返回的指针存储在一个变量中,例如 pData。
BYTE* pData = (BYTE*)GlobalLock(hData);
- 使用 GetDIBits 函数将位图数据复制到内存块中。
HDC hdc = GetDC(NULL);
GetDIBits(hdc, hBitmap, 0, bitmap.bmHeight, pData, (BITMAPINFO*)&bitmap, DIB_RGB_COLORS);
ReleaseDC(NULL, hdc);
- 使用 memcpy 函数将内存块中的数据复制到 byte 数组中。
BYTE* byteArray = new BYTE[dataSize];
memcpy(byteArray, pData, dataSize);
- 使用 GlobalUnlock 函数解锁内存块。
GlobalUnlock(hData);
- 可选步骤:如果不再需要位图数据,请使用 GlobalFree 函数释放内存。
GlobalFree(hData);
现在,您可以使用 byteArray 数组来处理保存的位图数据。
请注意,以上代码只是一个示例,您可能需要根据您的具体需求进行适当的修改。
原文地址: https://www.cveoy.top/t/topic/qgZa 著作权归作者所有。请勿转载和采集!