Bonjour a tous ,

J ai voulu il y a quelque temps écrire un programme capable de prendre des screenshot. Après quelques recherche sur internet. J ai trouver le moyen d y arriver. je simule une pression sur la touche print-screen grace a Key_Event.
Ensuite j' enregistre le contenu du presse papier dans un fichier bmp grace a une fonction que j ai pu trouvé lors de mes recherches. Maintenant J' aimerai enregistrer le fichier en monochrôme. J ai essayer de changer un peu les valeurs que je mettais dans la structure bmih mais ca ne marche pas toute aide est la bienvenue.

Voici le code de la fonction:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; 
}