Oppure

Loading
29/09/07 20:49
geeko
visto che hai risolto posta la soluzione a tutti cosi
chi ha avuto il mio stesso problema... può prendere spunto ;)
aaa
30/09/07 11:42
alek777
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.

#include <stdio.h>
#include <windows.h>
extern "C" {
  #include <jpeglib.h>
} 

int jpegCapture(char* filename, int quality){
	HBITMAP hBMP; // la variabile del bitmap
	HWND desktopWnd;
	int width;
	int height;
	RECT rc;
	HDC hDC;
	HDC hDCmem;
	
	struct jpeg_compress_struct cinfo;
	struct jpeg_error_mgr jerr;
	FILE * outfile;
	JSAMPLE* scanline;
	COLORREF pixel;

	
desktopWnd = GetDesktopWindow();
	GetWindowRect(desktopWnd, &rc);
	width = rc.right - rc.left;
	height = rc.bottom - rc.top;
	hDC = GetDC(desktopWnd);
	hDCmem = CreateCompatibleDC(hDC);
  	hBMP = CreateCompatibleBitmap(hDC, width, height);
  	if(hBMP == NULL) return -2;

// da qui in poi inizia la compressione jpg

	SelectObject(hDCmem, hBMP);
	BitBlt(hDCmem, 0, 0, width, height, hDC, rc.left, rc.top, SRCCOPY);
 
	cinfo.err = jpeg_std_error(&jerr);
	jpeg_create_compress(&cinfo);
	outfile = fopen(filename, "wb");
	if(outfile == NULL) return -1;
	jpeg_stdio_dest(&cinfo, outfile);
	cinfo.image_width = width;
	cinfo.image_height = height;
	cinfo.input_components = 3;
	cinfo.in_color_space = JCS_RGB;
	jpeg_set_defaults(&cinfo);
	if(quality < 0) quality = 0;
	if(quality > 100) quality = 100;
	jpeg_set_quality(&cinfo, quality, FALSE);
	jpeg_start_compress(&cinfo, TRUE);
  	scanline = new JSAMPLE[width*3];
  	
	for(int posy = 0; posy < height; posy++) {
		for(int posx = 0; posx < width; posx++){
      		pixel = GetPixel(hDCmem, posx, posy);
      		scanline[posx*3+0] = GetRValue(pixel);
			scanline[posx*3+1] = GetGValue(pixel);
			scanline[posx*3+2] = GetBValue(pixel);
		}
		jpeg_write_scanlines(&cinfo, &scanline, 1);
	}
	jpeg_finish_compress(&cinfo);
  
	jpeg_destroy_compress(&cinfo);
	delete scanline;
	fclose(outfile);
	DeleteDC(hDCmem);
  	ReleaseDC(desktopWnd, hDC);
	return 0;
}
int main (int argc,char* argv[]){
        if(argc>3){
            Sleep(atoi(argv[1])); // sleep prima di effettuare lo screen
    	    jpegCapture(argv[2],atoi(argv[3]));
        }
        else {
             // senza argomenti
             jpegCapture("screen.jpg",60);
        }
        return 0;
}



:k:
aaa
31/03/09 0:25
mdma
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?
aaa