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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| BOOL clip2bmp(LPCTSTR pszFileBMP)
{
HDC hdcMem;
HDC hdcScr;
HBITMAP hBitmap;
HBITMAP hBitOld;
BITMAP bm;
BITMAPINFO bmi;
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bmih;
HANDLE hFile;
LPBYTE pPixels;
DWORD dwBytes;
DWORD dwTmp;
if(OpenClipboard(NULL))
{
hBitmap = (HBITMAP) GetClipboardData(CF_BITMAP);
CloseClipboard();
}
else
return FALSE;
if(!hBitmap)
return FALSE;
if(!GetObject(hBitmap, sizeof(bm), &bm))
return FALSE;
hdcScr = GetDC(NULL);
hdcMem = CreateCompatibleDC(hdcScr);
hBitOld = (HBITMAP) SelectObject(hdcMem, hBitmap);
ZeroMemory(&bmih, sizeof(bmih));
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = bm.bmWidth;
bmih.biHeight = bm.bmHeight;
bmih.biBitCount = bm.bmBitsPixel;
bmih.biCompression = BI_RGB ;
bmih.biPlanes = 1;
bmi.bmiHeader = bmih;
dwBytes = bmih.biWidth * bmih.biHeight * (bmih.biBitCount / 8);
if(!(pPixels = (LPBYTE) GlobalAlloc(GMEM_FIXED, dwBytes))){
MessageBox(NULL,"Erreur!!! STRUCTURE","test",MB_OK);
goto Erreur; }
if(!GetDIBits(hdcMem, hBitmap, 0, (UINT) bmih.biHeight, pPixels, &bmi, DIB_RGB_COLORS)){
MessageBox(NULL,"Erreur!!! STRUCTURE2","test",MB_OK);
goto Erreur; }
bfh.bfType = 0x4d42;
bfh.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bfh.bfSize = (DWORD) sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwBytes;
bfh.bfReserved1 = bfh.bfReserved2 = 0;
hFile = CreateFile(pszFileBMP, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE) {
MessageBox(NULL,"Erreur!!!","test",MB_OK);
goto Erreur; }
if(!WriteFile(hFile, (LPVOID) &bfh, sizeof(BITMAPFILEHEADER), (LPDWORD) &dwTmp, NULL)){
MessageBox(NULL,"Erreur!!!","test",MB_OK);
goto Erreur; }
if(!WriteFile(hFile, (LPVOID) &bmih, sizeof(BITMAPINFOHEADER), (LPDWORD) &dwTmp, NULL)){
MessageBox(NULL,"Erreur!!!","test",MB_OK);
goto Erreur; }
if(!WriteFile(hFile, (LPVOID) pPixels, dwBytes, (LPDWORD) &dwTmp, NULL)){
MessageBox(NULL,"Erreur!!!","test",MB_OK);
goto Erreur; }
GlobalFree(pPixels);
CloseHandle(hFile);
SelectObject(hdcMem, hBitOld);
ReleaseDC(NULL, hdcScr);
DeleteDC(hdcMem);
return TRUE;
Erreur:
if(pPixels)
GlobalFree(pPixels);
if(hFile)
{
CloseHandle(hFile);
DeleteFile(pszFileBMP);
}
SelectObject(hdcMem, hBitOld);
ReleaseDC(NULL, hdcScr);
DeleteDC(hdcMem);
return FALSE;
} |
Partager