我尝试使用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();
}
}