jpeglib Problem
-
Servus,
ich versuche schon seit geraumer Zeit ein Programm zu programmieren, dass ein bmp Bild zu einem Jpg konvertiert. Jetzt bin ich auf jpeglib.h gestoßen. Da diese auch für Dev-C++ erhältlich ist, hab ich eigentlich gedacht, dass es keine Probleme geben sollte. Aber als ich dieses Programm kompilierte, stürzte das Programm ab, nachdem ich es ausgeführt hatte:#include <stdlib.h> #include <windows.h> #include <stdio.h> //#ifdef INT32 //#undef INT32 //#endif #include <jpeglib.h> #pragma comment(lib, "jpeglib.lib"); int jpegCapture(char* filename, int quality) { HBITMAP hBMP; HWND desktopWnd; int width; int height; RECT rc; HDC hDC; HDC hDCmem; int posx; int posy; unsigned char scanline[1000000000]; JSAMPROW row_pointer[1]; // pointer to JSAMPLE row[s] struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; FILE * outfile; COLORREF pixel; // Make capture bitmap 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; SelectObject(hDCmem, hBMP); BitBlt(hDCmem, 0, 0, width, height, hDC, rc.left, rc.top, SRCCOPY); // Compress to JPEG using hDCmem cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); outfile = fopen(filename, "w+b"); 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; else if(quality > 100) quality = 100; jpeg_set_quality(&cinfo, quality, FALSE); jpeg_start_compress(&cinfo, TRUE); for (posy = 0; posy < height; posy++) { for (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); } row_pointer[0] = &scanline[0]; (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); } jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); fclose(outfile); DeleteDC(hDCmem); ReleaseDC(desktopWnd, hDC); return 0; } int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { jpegCapture("hallo.jpg",75); return 0; }Es liegt an den Funktionen der jpeglib.h, aber was der Fehler ist, weiß ich nicht. Die Funktion hab ich von dieser Website "geklaut": http://members.aol.com/OlivThill/savejpg/savejpg1_c.htm
Bitte keine "Antworten" in Richtungen: "Warum nimmst du kein GDI+?"
Ich will in C und nicht in C++ programmieren.
-
Warum stellst du die Frage dann im WinAPI Forum wenn es an der jpeglib liegt? Die gehört doch gar nicht zur WinAPI.

-
Sorry, aber nach folgenden Beiträgen, war ich mir fast sicher:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-95271-and-highlight-is-jpeglib.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-46819-and-highlight-is-jpeglib.htmlBitte verschieben, danke.
-
Ein Fehler ist auf jeden Fall hier:
unsigned char scanline[1000000000];Der Stack ist normalerweise nur 1 MB groß.
-
is auch völlig überflüssig
-
außerdem den code ohne comments zu rippen ist auch alles andere als intelligent

-
außerdem steht im orignal unsigned char scanline[2000*3]; bist du zu blöd zum kopieren?
-
Danke, das wars. Ich hab das bloß geändert, weil ich einen anderen Fehler hatte und gemeint hab, dass es daran liegen würde.