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
C/C++ - Convertire immagini da bmp a jpg
Forum - C/C++ - Convertire immagini da bmp a jpg - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
alek777 (Normal User)
Rookie


Messaggi: 25
Iscritto: 18/09/2007

Segnala al moderatore
Postato alle 13:42
Domenica, 30/09/2007
ok
in pratica questo programma fa lo stamp dello schermo lo mette in un bmp in memoria e poi lo trasforma in jpg
ho unito due codici trovati qua e la per la rete.

se usate devc++ basta installare jpeglib.

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <windows.h>
  3. extern "C" {
  4.   #include <jpeglib.h>
  5. }
  6.  
  7. int jpegCapture(char* filename, int quality){
  8.         HBITMAP hBMP; // la variabile del bitmap
  9.         HWND desktopWnd;
  10.         int width;
  11.         int height;
  12.         RECT rc;
  13.         HDC hDC;
  14.         HDC hDCmem;
  15.        
  16.         struct jpeg_compress_struct cinfo;
  17.         struct jpeg_error_mgr jerr;
  18.         FILE * outfile;
  19.         JSAMPLE* scanline;
  20.         COLORREF pixel;
  21.  
  22.        
  23. desktopWnd = GetDesktopWindow();
  24.         GetWindowRect(desktopWnd, &rc);
  25.         width = rc.right - rc.left;
  26.         height = rc.bottom - rc.top;
  27.         hDC = GetDC(desktopWnd);
  28.         hDCmem = CreateCompatibleDC(hDC);
  29.         hBMP = CreateCompatibleBitmap(hDC, width, height);
  30.         if(hBMP == NULL) return -2;
  31.  
  32. // da qui in poi inizia la compressione jpg
  33.  
  34.         SelectObject(hDCmem, hBMP);
  35.         BitBlt(hDCmem, 0, 0, width, height, hDC, rc.left, rc.top, SRCCOPY);
  36.  
  37.         cinfo.err = jpeg_std_error(&jerr);
  38.         jpeg_create_compress(&cinfo);
  39.         outfile = fopen(filename, "wb");
  40.         if(outfile == NULL) return -1;
  41.         jpeg_stdio_dest(&cinfo, outfile);
  42.         cinfo.image_width = width;
  43.         cinfo.image_height = height;
  44.         cinfo.input_components = 3;
  45.         cinfo.in_color_space = JCS_RGB;
  46.         jpeg_set_defaults(&cinfo);
  47.         if(quality < 0) quality = 0;
  48.         if(quality > 100) quality = 100;
  49.         jpeg_set_quality(&cinfo, quality, FALSE);
  50.         jpeg_start_compress(&cinfo, TRUE);
  51.         scanline = new JSAMPLE[width*3];
  52.        
  53.         for(int posy = 0; posy < height; posy++) {
  54.                 for(int posx = 0; posx < width; posx++){
  55.                 pixel = GetPixel(hDCmem, posx, posy);
  56.                 scanline[posx*3+0] = GetRValue(pixel);
  57.                         scanline[posx*3+1] = GetGValue(pixel);
  58.                         scanline[posx*3+2] = GetBValue(pixel);
  59.                 }
  60.                 jpeg_write_scanlines(&cinfo, &scanline, 1);
  61.         }
  62.         jpeg_finish_compress(&cinfo);
  63.  
  64.         jpeg_destroy_compress(&cinfo);
  65.         delete scanline;
  66.         fclose(outfile);
  67.         DeleteDC(hDCmem);
  68.         ReleaseDC(desktopWnd, hDC);
  69.         return 0;
  70. }
  71. int main (int argc,char* argv[]){
  72.         if(argc>3){
  73.             Sleep(atoi(argv[1])); // sleep prima di effettuare lo screen
  74.             jpegCapture(argv[2],atoi(argv[3]));
  75.         }
  76.         else {
  77.              // senza argomenti
  78.              jpegCapture("screen.jpg",60);
  79.         }
  80.         return 0;
  81. }




:k:

PM Quote
Avatar
mdma (Normal User)
Newbie


Messaggi: 1
Iscritto: 31/03/2009

Segnala al moderatore
Postato alle 2:25
Martedė, 31/03/2009
Ciao a tutti, sono nuovo del forum e sto impazzendo da due giorni per il problema qui postato, volevo sapere se potevi dirmi esattamente come hai risolto...io uso il dev-c++, ho letto che basta installare le jpeglib...giusto?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo