integrato ;)
Libreria per la cattura e il salvataggio di immagini
Screen.cpp/Screen.h

 
Dettagli:
 
Questa libreria permette la cattura della schermata corrente (Desktop window) ed il suo salvataggio in formato bitmap e jpeg.
Per la conversione in formato jpg viene utilizzata la libreria CxImage (versione 5.71).
Codice e riferimenti:

 
Codice:
 
Cattura finestra:
  1. HBITMAP CaptureScreen(void)
  2. {
  3. HWND hDesktopWnd;
  4. HDC hDesktopDC,hCaptureDC;
  5. HBITMAP hCaptureBitmap;
  6. // Ricavo la risoluzione dello schermo
  7. int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
  8. int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
  9.  
  10. // Aquisizione handle finestra Desktop
  11. hDesktopWnd = GetDesktopWindow();
  12. // Ricavo il DC della finestra
  13. hDesktopDC = GetDC(hDesktopWnd);
  14. // Creo un DC in memoria compatibile con la finestra catturata
  15. hCaptureDC = CreateCompatibleDC(hDesktopDC);
  16. // Creo una bitmap compatibile associata al DC della finestra catturata
  17. hCaptureBitmap = CreateCompatibleBitmap(hDesktopDC,
  18. nScreenWidth,
  19. nScreenHeight);
  20. // Seleziono l'immagine dal DC
  21. SelectObject(hCaptureDC,hCaptureBitmap);
  22. // Trasferisco il contenuto del DC catturato nel DC comptabile creato
  23. BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);
  24.  
  25. // Rilascio il DC della finestra
  26. ReleaseDC(hDesktopWnd,hDesktopDC);
  27. // Cancello il DC compatibile
  28. DeleteDC(hCaptureDC);
  29.  
  30. // Ritorno l'handle della bitmap
  31. return hCaptureBitmap;
  32. }
Salvataggio bitmap:
  1. BOOL SaveCapturedBitmap(char* FilePath,HBITMAP hBitmap)
  2. {
  3. HDC hdc = NULL;
  4. FILE* fp = NULL;
  5. LPVOID pBuf = NULL;
  6. BITMAPINFO bmpInfo;
  7. BITMAPFILEHEADER bmpFileHeader;
  8. hdc=GetDC(NULL);
  9. ZeroMemory(&bmpInfo,sizeof(BITMAPINFO));
  10. bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
  11. GetDIBits(hdc,hBitmap,0,0,NULL,&bmpInfo,DIB_RGB_COLORS);
  12.  
  13. if (bmpInfo.bmiHeader.biSizeImage<=0)
  14. bmpInfo.bmiHeader.biSizeImage = bmpInfo.bmiHeader.biWidth*
  15. abs(bmpInfo.bmiHeader.biHeight)*
  16. (bmpInfo.bmiHeader.biBitCount+7)/8;
  17.  
  18. if ((pBuf = malloc(bmpInfo.bmiHeader.biSizeImage))==NULL)
  19. {
  20. //printf("Unable to Allocate Bitmap Memory");
  21. return false;
  22. }
  23.  
  24. bmpInfo.bmiHeader.biCompression=BI_RGB;
  25. GetDIBits(hdc,
  26. hBitmap,
  27. 0,
  28. bmpInfo.bmiHeader.biHeight,
  29. pBuf,
  30. &bmpInfo,
  31. DIB_RGB_COLORS);
  32.  
  33. if((fp = fopen(FilePath,"wb"))==NULL)
  34. {
  35. //printf("Unable to Create Bitmap File");
  36. return false;
  37. }
  38.  
  39. bmpFileHeader.bfReserved1=0;
  40. bmpFileHeader.bfReserved2=0;
  41. bmpFileHeader.bfSize=sizeof(BITMAPFILEHEADER)+
  42. sizeof(BITMAPINFOHEADER)+
  43. bmpInfo.bmiHeader.biSizeImage;
  44. bmpFileHeader.bfType='MB';
  45. bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+
  46. sizeof(BITMAPINFOHEADER);
  47. fwrite(&bmpFileHeader,sizeof(BITMAPFILEHEADER),1,fp);
  48. fwrite(&bmpInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
  49. fwrite(pBuf,bmpInfo.bmiHeader.biSizeImage,1,fp);
  50. fclose(fp);
  51.  
  52. return true;
  53. }
Salvataggio jpeg:
  1. BOOL SaveCapturedJpeg(char* FilePath,HBITMAP hBitmap)
  2. {
  3. CxImage image;
  4.  
  5. image.CreateFromHBITMAP(hBitmap);
  6.  
  7. if (image.IsValid())
  8. image.Save(FilePath,CXIMAGE_FORMAT_JPG);
  9. else
  10. return false;
  11.  
  12. return true;
  13. }

 
Esempio di utilizzo:
 
  1. #pragma comment(linker,"/subsystem:windows")
  2. #pragma comment(linker,"/NODEFAULTLIB:LIBC.LIB")
  3.  
  4. #include "Screen.h"
  5.  
  6.  
  7. int WINAPI WinMain(HINSTANCE hInstance,
  8. HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
  9. {
  10. HBITMAP hCaptureBitmap;
  11.  
  12. // Catturo la schermata
  13. hCaptureBitmap = CaptureScreen();
  14. // Ne salvo una copia in formato bitmap
  15. SaveCapturedBitmap("c:\screen.bmp",hCaptureBitmap);
  16. // Ne salvo una copia in formato jpeg
  17. SaveCapturedJpeg("c:\screen.jpg",hCaptureBitmap);
  18.  
  19. // Rilascio
  20. DeleteObject(hCaptureBitmap);
  21.  
  22. return 0;
  23. }
Nota: Viene nascosta la finestra del programma per evitarne la cattura.

 
Download:
 
Downloads: 283
Downloads: 259
Downloads: 153

Script Execution Time: 0.091113 seconds - Visite: 640641
Copyright © 2007-2017 Suondmao v0.1.5-1