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