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.
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; }
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