C++ | Convert bmp to jpg | Keiner ne Ahnung?

Hey,
Ich hab ein Problem:
Und zwar will ich ein *.bmp über c++ zu *.jpg/*.jpeg konvertieren und das dann speichern.
Ich hab schon ein Programm, das mir einen Screenshot macht, aber das speichert es leider nur in Bitmap (3MB).
Mit jpg hätte es nur 200KB oder sowas.

Code:
/* <Include> */
#include <windows.h>
#include <cstdlib>
/* </Include> */

/* <Const> */
const char *AppName="Yeah";
/* </Const> */

/* <Function> */
void SaveScreen(HWND pScreen, char Path[])
{
	int     Width  = GetSystemMetrics(SM_CXSCREEN)/*1280*/;
	int     Height = GetSystemMetrics(SM_CYSCREEN)/*1024*/;

    HDC hdcScreen;
    HBITMAP hbmScreen;
 
 
    //---------------Bitmap Informationen
    BITMAPINFO infobmp;
    infobmp.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    infobmp.bmiHeader.biWidth = Width;
    infobmp.bmiHeader.biHeight = Height;
    infobmp.bmiHeader.biPlanes = 1;
    infobmp.bmiHeader.biBitCount = 24;
    infobmp.bmiHeader.biCompression = 0;
    infobmp.bmiHeader.biSizeImage = 0;
    infobmp.bmiHeader.biXPelsPerMeter = 0;
    infobmp.bmiHeader.biYPelsPerMeter = 0;
    infobmp.bmiHeader.biClrUsed = 0;
    infobmp.bmiHeader.biClrImportant = 0;
 
    int* bitmap = new int[Width*Height*3];
 
    BITMAPFILEHEADER bfheader;
     
    bfheader.bfType = 19778;
    bfheader.bfSize = sizeof(BITMAPFILEHEADER) + Width*Height*3 + sizeof(BITMAPINFOHEADER);
    bfheader.bfReserved1 = 0;
    bfheader.bfReserved2 = 0;
    bfheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    //Bitmap -----------------------      Informationen
 
 
    hdcScreen = GetWindowDC(pScreen);
    hbmScreen = CreateCompatibleBitmap(hdcScreen, Width, Height);
 
    // temporärer DC
    HDC hdcTemp = CreateCompatibleDC(hdcScreen);
 
    // Bitmap reinselektieren
    HBITMAP hbmOld = (HBITMAP)SelectObject(hdcTemp, hbmScreen);
 
    // Inhalt von Desktop übertragen
    BitBlt(hdcTemp, 0, 0, Width, Height, hdcScreen, 0, 0, SRCCOPY);
 
    int iResult = GetDIBits(hdcTemp, hbmScreen, 0, Height, bitmap, &infobmp, DIB_RGB_COLORS);
 
    // aufräumen
    SelectObject(hdcTemp, hbmOld);
    DeleteObject(hbmScreen);
    DeleteDC(hdcTemp);
 
    HANDLE hfile = CreateFile(Path, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0);
 
    //Datei Schreiben
    DWORD word;
    WriteFile(hfile, &bfheader, 14, &word, NULL);
    WriteFile(hfile, &infobmp, 40,& word, NULL);
    WriteFile(hfile, bitmap, Width*Height*3, &word,NULL);
 
    ReleaseDC(pScreen, hdcScreen);
    CloseHandle(hfile);
    delete[] bitmap;
}
/* </Function> */

int WINAPI WinMain(      
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
{	
	HWND hWnd = FindWindow(NULL, AppName);


	char *path="C:\\screen3.bmp";
	Sleep(1000);
	SaveScreen(hWnd, path);

	return 0;
}

libgdi32.a ist gelinkt.

Ich hab Dev-Cpp (mingw-Compiler)
und benutze Windows XP.

Ich hab das ganze auch schon mit libjpeg versucht, nur leider bekomm ich den Beispielcode nicht kompiliert, weils immer ein paar Linker-Errors gibt.


Kennt jmd. eine Möglichkeit das ganze zu konvertieren und, wenn mir das einer Step-by-Step erklären könnte, wie ich die jpeglib unter Dev-Cpp zum laufen bringen würde, wäre das auch super. ( Am Besten wirklich: Kopiere ... in Dev-Cpp/lib und öffne Projekt -->Pojektoptionen.....)

Ich such jetzt schon seit paar Tagen danach, aber bekomms i-wie nicht zum laufen.


Andere Tips um die Bitmap komprimiert zu bekommen sind auch erwünscht. :)

Danke schonmal im Voraus

slightlyNERD
 
Zurück
Oben