如何从位图提取像素数据?

时间:2019-11-28 07:51:17

标签: c++ bitmap clipboard

我尝试使用C ++中的winapi将剪贴板中的图片粘贴到程序中,但是当我获取CF_BITMAP,CF_DIB和CF_DIBV5时,由于得到了空指针,因此无法使用这些结构。我需要获取文件的总大小,以便我可以设置字节的向量/数组并将图像数据作为字节插入向量中。我做了几次尝试都没有用,我不知道为什么。在这两种情况下,globallock函数都将返回空指针。

UINT priority[3] = {CF_BITMAP, CF_DIB , CF_DIBV5};
if (OpenClipboard(hwnd))
        {int x = GetPriorityClipboardFormat(priority, 2);
            if (IsClipboardFormatAvailable(x)) {
                    HANDLE img = GetClipboardData(x);
                    void* i = GlobalLock(img);
                    byte check[164] = { 0 };
                    memcpy(check, (byte*)i, 40);
// check the content of header in size 40
                    for (int k = 0; k < 40; ++k) {
                        cout << check[k] << " ";
                        if (k % 10 == 0) {
                            cout << endl;
                        }
                    }
                GlobalUnlock(img);
                CloseClipboard();
        }

另一种尝试是:

UINT priority[3] = {CF_BITMAP, CF_DIB , CF_DIBV5};
    if (OpenClipboard(hwnd)){
if (IsClipboardFormatAvailable(CF_BITMAP)) {
                    HANDLE img = GetClipboardData(CF_BITMAP);
                    byte* i = (byte*)GlobalLock(img);



               printf("\n\nbitmap: %d and img size: %d\n\n", sizeof(*i), sizeof(img));

                GlobalUnlock(img);
                CloseClipboard();
        }

}

0 个答案:

没有答案