Ik heb een plaatje in m'n geheugen en die moet naar het clipboard. Het plaatje is gewoon een raw buffer met 32bit RGB pixeldata, geen DIB of Bitmap ofzoiets.
Ik heb nu dit:
Dat wil zeggen de functie returnt wel 0, maar het clipboard bevat daarna geen geldige image (kan geen paste doen in photoshop of andere progs). Heb ook geprobeerd om die DeleteObject op het eind te commenten, misschien dat daardoor iets blijft bestaan wat nu verloren gaat, maar dat maakte geen veschil.
Ik heb ook bij SetClipboardData CF_DIB gebruikt in plaats van CF_BITMAP, maar dan is de handle die ik terugkrijg NULL.
Weet iemand hoe het wel moet?
Ik heb nu dit:
code:
Maar die werkt niet 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| int PutImageInClipboard( unsigned int *pixelData, int width, int height )
{
BITMAPINFO bmi;
ZeroMemory(&bmi,sizeof(BITMAPINFO));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = width;
bmi.bmiHeader.biHeight = -height;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
void *dibData;
HBITMAP bitmap = CreateDIBSection(NULL,&bmi,DIB_RGB_COLORS,(void**)&dibData,NULL,0);
int dataSize = width*height*4;
memcpy(dibData,pixelData,dataSize);
if (!OpenClipboard(NULL)) return 1;
if (!EmptyClipboard()) return 2;
HANDLE handle = SetClipboardData(CF_BITMAP,bitmap);
if (!handle) return 3;
if (!CloseClipboard()) return 4;
DeleteObject(bitmap);
return 0;
} |
Dat wil zeggen de functie returnt wel 0, maar het clipboard bevat daarna geen geldige image (kan geen paste doen in photoshop of andere progs). Heb ook geprobeerd om die DeleteObject op het eind te commenten, misschien dat daardoor iets blijft bestaan wat nu verloren gaat, maar dat maakte geen veschil.
Ik heb ook bij SetClipboardData CF_DIB gebruikt in plaats van CF_BITMAP, maar dan is de handle die ik terugkrijg NULL.
Weet iemand hoe het wel moet?