我目前正致力于将图片保存到剪贴板。 base64数据来自通过WebSocket传递并由C ++应用程序处理的浏览器(base64)。
我的问题是在C ++端将base64代码转换为字节数组,然后将HBITMAP转换为BITMAP,然后将其保存到剪贴板。
我使用 CryptStringToBinaryA 从base64(len:95000)转换为字节数组(len:70000)。
bRet = CryptStringToBinaryA(
base64,
strlen(base64),
CRYPT_STRING_BASE64,
&bytes[0],
&length,
NULL,
NULL);
然后,从字节数组中,我使用 CreateDIBSection 来获取 HBITMAP 。
tagBITMAPFILEHEADER bmfh = *(tagBITMAPFILEHEADER*)bytes;
tagBITMAPINFOHEADER bmih = *(tagBITMAPINFOHEADER*)(bytes + sizeof(tagBITMAPFILEHEADER));
RGBQUAD rgb = *(RGBQUAD*)(bytes + sizeof(tagBITMAPFILEHEADER) + sizeof(tagBITMAPINFOHEADER));
BITMAPINFO bi;
bi.bmiColors[0] = rgb;
bi.bmiHeader = bmih;
byte* pPixels = (bytes+bmfh.bfOffBits);
void* ppvBits;
HDC hdc = GetDC(NULL);
HBITMAP hBitmap = CreateDIBSection(hdc, &bi, DIB_RGB_COLORS, &ppvBits, NULL, 0);
SetDIBits(NULL, hBitmap, 0, 500, pPixels, &bi, DIB_RGB_COLORS);
这导致了问题,因为 ppvBits返回0 。
当我尝试 GetObject 时,它返回0.
GetObject(hBitmap, sizeof(BITMAP), NULL)
我还尝试在GetObject之后执行GetLastError。我收到了这个错误。
当该文件已存在时无法创建文件。
有谁知道这可能是什么问题?