将图像保存到剪贴板(从Javascript到C ++)

时间:2017-10-20 08:56:07

标签: c++ base64 clipboard hbitmap

我目前正致力于将图片保存到剪贴板。 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。我收到了这个错误。

  

当该文件已存在时无法创建文件。

有谁知道这可能是什么问题?

0 个答案:

没有答案