Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Beatrix - Screenshot.cpp

Screenshot.cpp

Caricato da: Piero Tofy
Scarica il programma completo

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include "Screenshot.h"
  4. #include "FileManager.h"
  5.  
  6. #include "CxImage/xfile.h"
  7. #include "CxImage/ximabmp.h"
  8. #include "CxImage/ximajpg.h"
  9. #include "CxImage/ximage.h"
  10.  
  11. /* Screenshot.cpp | by PieroTofy 2005 http://www.pierotofy.it |
  12.  
  13. Si veda il file Screenshot.h per l'utilizzo delle funzioni
  14. presenti nel modulo  */
  15.  
  16.  
  17. void GetScreenshot(){
  18.         HBITMAP hBitmap;
  19.  
  20.         //Preme il tasto per catturare la schermata negli appunti
  21.         keybd_event(VK_SNAPSHOT,0,0,1);
  22.        
  23.         //E lo rilascia
  24.         keybd_event(VK_SNAPSHOT,0,0,0);
  25.  
  26.         if(OpenClipboard(NULL)){
  27.                 //Prende l'immagine dagli appunti
  28.                 hBitmap=(HBITMAP)GetClipboardData(CF_BITMAP);
  29.  
  30.                 //E la salva
  31.                 SaveBitmap(SCREENSHOTBMPFILE,hBitmap);
  32.  
  33.                 //Chiude gli appunti
  34.                 CloseClipboard();
  35.  
  36.  
  37.                 //Converte
  38.                 CxImage image;
  39.                 // bmp -> jpg
  40.                 image.Load(SCREENSHOTBMPFILE, CXIMAGE_FORMAT_BMP);
  41.                 if (image.IsValid()){
  42.                         //if(!image.IsGrayScale()) image.IncreaseBpp(24);
  43.                         image.SetJpegQuality(50);
  44.                         image.Save(SCREENSHOTJPGFILE,CXIMAGE_FORMAT_JPG);
  45.                 }
  46.                
  47.                 //Cancella il bmp
  48.                 DeleteFile(SCREENSHOTBMPFILE); 
  49.         }
  50.  
  51. }
  52.  
  53. /*
  54. Funzione per scrivere l'handle di una bitmap su file
  55. Thanks to http://www.geocities.com/krishnapg/bitmap.html#SaveBitmap
  56. */
  57. void SaveBitmap(char *szFilename,HBITMAP hBitmap){
  58.       HDC        hdc=NULL;
  59.       FILE*      fp=NULL;
  60.       LPVOID     pBuf=NULL;
  61.       BITMAPINFO bmpInfo;
  62.       BITMAPFILEHEADER  bmpFileHeader;
  63.       do{
  64.             hdc=GetDC(NULL);
  65.             ZeroMemory(&bmpInfo,sizeof(BITMAPINFO));
  66.             bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
  67.             GetDIBits(hdc,hBitmap,0,0,NULL,&bmpInfo,DIB_RGB_COLORS);
  68.             if(bmpInfo.bmiHeader.biSizeImage<=0)
  69.             bmpInfo.bmiHeader.biSizeImage=bmpInfo.bmiHeader.biWidth*abs(bmpInfo.bmiHeader.biHeight)*(bmpInfo.bmiHeader.biBitCount+7)/8;
  70.             if((pBuf = malloc(bmpInfo.bmiHeader.biSizeImage))==NULL)
  71.             {
  72.                   //MessageBox( NULL, "Unable to Allocate Bitmap Memory", "Error", MB_OK|MB_ICONERROR);
  73.                   break;
  74.             }          
  75.             bmpInfo.bmiHeader.biCompression=BI_RGB;
  76.             GetDIBits(hdc,hBitmap,0,bmpInfo.bmiHeader.biHeight,pBuf, &bmpInfo, DIB_RGB_COLORS);      
  77.             if((fp = fopen(szFilename,"wb"))==NULL)
  78.             {
  79.                   //MessageBox( NULL, "Unable to Create Bitmap File", "Error", MB_OK|MB_ICONERROR);
  80.                   break;
  81.             }
  82.             bmpFileHeader.bfReserved1=0;
  83.             bmpFileHeader.bfReserved2=0;
  84.             bmpFileHeader.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bmpInfo.bmiHeader.biSizeImage;
  85.             bmpFileHeader.bfType='MB';
  86.             bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
  87.             fwrite(&bmpFileHeader,sizeof(BITMAPFILEHEADER),1,fp);
  88.             fwrite(&bmpInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
  89.             fwrite(pBuf,bmpInfo.bmiHeader.biSizeImage,1,fp);
  90.       }while(false);
  91.             if(hdc)     ReleaseDC(NULL,hdc);
  92.             if(pBuf)    free(pBuf);
  93.             if(fp)      fclose(fp);
  94. }