CF_BITMAP 不能使用GlobalSize那如何memcpy保存
在CF_BITMAP中,我们不能直接使用GlobalSize来获取位图的大小。相反,我们可以使用GetClipboardData函数来获取位图的句柄,并使用GlobalLock函数将其锁定在内存中。然后,我们可以使用GlobalSize函数来获取位图的大小。最后,我们使用memcpy函数将位图数据复制到另一个内存缓冲区中以保存。
以下是一个示例代码:
// 获取位图数据
HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
// 锁定位图数据在内存中
HGLOBAL hMem = (HGLOBAL)hBitmap;
LPVOID pBitmapData = GlobalLock(hMem);
// 获取位图大小
DWORD dwBitmapSize = GlobalSize(hMem);
// 创建一个新的内存缓冲区用于保存位图数据
LPVOID pBuffer = new BYTE[dwBitmapSize];
// 复制位图数据到缓冲区
memcpy(pBuffer, pBitmapData, dwBitmapSize);
// 释放位图数据内存
GlobalUnlock(hMem);
// 保存位图数据到文件或其他位置
// 清理内存缓冲区
delete[] pBuffer;
请注意,这只是一个简单的示例代码,并且省略了错误处理和其他细节。在实际使用中,您可能需要进行适当的错误检查和处理,并且可能需要将位图数据保存到文件或其他位置
原文地址: https://www.cveoy.top/t/topic/izVC 著作权归作者所有。请勿转载和采集!