screenshot



  • bei den 34 error ist so:

    #include <windows.h> 
    #include <gdiplus.h>
    .
    .
    .
    


  • Tja, dann mußt Du die Reihenfolge ändern. Du inkludierst offensichtlich die falsche <windows.h>. Du mußt den Pfad unter Extras->Optionen->Verzeichnisse weiter nach oben holen (dazu markierst Du den Pfad und drückst auf den Pfeil nach oben).



  • -King- schrieb:

    Tja, dann mußt Du die Reihenfolge ändern. Du inkludierst offensichtlich die falsche <windows.h>. Du mußt den Pfad unter Extras->Optionen->Verzeichnisse weiter nach oben holen (dazu markierst Du den Pfad und drückst auf den Pfeil nach oben).

    aso...
    nun habs ich so:

    #include <gdiplus.h>
    #include <windows.h>
    #include <stdlib.h>
    #include <string> 
    #include <sstream> 
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    

    in den optionen bei verzeichnisse hab ich nun SDK include rauf getan!!:

    C:\PROGRAMME\MICROSOFT SDK\INCLUDE
    C:\Programme\Microsoft Visual Studio 6\VC98\INCLUDE
    C:\Programme\Microsoft Visual Studio 6\VC98\MFC\INCLUDE
    C:\Programme\Microsoft Visual Studio 6\VC98\ATL\INCLUDE

    aber:
    --------------------Konfiguration: screen - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    c:\programme\microsoft sdk\include\gdiplusenums.h(28) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'GraphicsState'
    c:\programme\microsoft sdk\include\gdiplusenums.h(28) : fatal error C1004: Unerwartetes Dateiende gefunden
    Fehler beim Ausführen von cl.exe.

    thx 👍



  • Du sollst als erstes <windows.h> inkludieren!



  • -King- schrieb:

    Du sollst als erstes <windows.h> inkludieren!

    ja aber denn kommen wieder mehr error;-(
    habs nun so:

    #include <windows.h>
    #include <gdiplus.h>
    #include <stdlib.h>
    #include <string> 
    #include <sstream> 
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    

    --------------------Konfiguration: screen - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    C:\screen\main.cpp(142) : error C2065: 'Graphics' : nichtdeklarierter Bezeichner
    C:\screen\main.cpp(142) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'graphics'
    C:\screen\main.cpp(142) : error C2065: 'graphics' : nichtdeklarierter Bezeichner
    C:\screen\main.cpp(145) : error C2065: 'Image' : nichtdeklarierter Bezeichner
    C:\screen\main.cpp(145) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'image'
    C:\screen\main.cpp(145) : error C2065: 'image' : nichtdeklarierter Bezeichner
    C:\screen\main.cpp(145) : error C2065: 'L' : nichtdeklarierter Bezeichner
    C:\screen\main.cpp(148) : error C2228: Der linke Teil von '.DrawImage' muss eine Klasse/Struktur/Union sein
    C:\screen\main.cpp(151) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'imageGraphics'
    C:\screen\main.cpp(151) : error C2065: 'imageGraphics' : nichtdeklarierter Bezeichner
    C:\screen\main.cpp(154) : error C2065: 'SolidBrush' : nichtdeklarierter Bezeichner
    C:\screen\main.cpp(154) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'brush'
    C:\screen\main.cpp(154) : error C2065: 'brush' : nichtdeklarierter Bezeichner
    C:\screen\main.cpp(154) : error C2065: 'Color' : nichtdeklarierter Bezeichner
    C:\screen\main.cpp(155) : error C2228: Der linke Teil von '.FillEllipse' muss eine Klasse/Struktur/Union sein
    C:\screen\main.cpp(158) : error C2228: Der linke Teil von '.DrawImage' muss eine Klasse/Struktur/Union sein
    C:\screen\main.cpp(162) : error C2065: 'GetEncoderClsid' : nichtdeklarierter Bezeichner
    C:\screen\main.cpp(163) : error C2228: Der linke Teil von '.Save' muss eine Klasse/Struktur/Union sein
    Fehler beim Ausführen von cl.exe.

    thx 👍



  • Hallo,

    du mußt noch die Zielplattform mit einem Makro definieren, sonst werden einige Definitionen "ausgeblendet. Dazu habe ich schon einmal etwas geschrieben, deshalb nur der Verweis:

    http://www.c-plusplus.net/forum/viewtopic.php?t=60812

    auf den entsprechenden Foren-Eintrag. Ab dem Titel: "SDK-Makros und Projekt-Einstellungen" solltest du mit dem Lesen anfangen...

    MfG



  • Probe-Nutzer schrieb:

    Hallo,

    du mußt noch die Zielplattform mit einem Makro definieren, sonst werden einige Definitionen "ausgeblendet. Dazu habe ich schon einmal etwas geschrieben, deshalb nur der Verweis:

    http://www.c-plusplus.net/forum/viewtopic.php?t=60812

    auf den entsprechenden Foren-Eintrag. Ab dem Titel: "SDK-Makros und Projekt-Einstellungen" solltest du mit dem Lesen anfangen...

    MfG

    na das wird ja immer komplexer;-( ich hab ja winxp...aber möchte ja auch das das bild zum speichern für win2000, winme und 98 geht!!! hmmm....

    ich möchte das über ein #define machen, das man vor die Header des SDK platziert!!!!! was schreib ich in meinem fall da rein!??? sorry aber ich arbeite mit sdk zum ersten mal!
    gar nicht gewusst da so ein abspeichern eines bildes -kompremiert so komplex ist!!;-(

    thx 👍



  • Das Abspeichern an sich ist ja nicht komplex - nur die Codeeinbindung.



  • WebFritzi schrieb:

    Das Abspeichern an sich ist ja nicht komplex - nur die Codeeinbindung.

    bitte helft mir noch da bei den codeeinstellungen....ich will das über ein #define machen, die man vor die Header des SDK platziert!!!!!

    was schreib ich in meinem fall da rein für define!??? hab winxp...will aber das win2000 und winme das speichern klappt...

    danke danke!
    thx 👍



  • ok, setze mal (sicherheitshalber) als erste Zeilen vor alle includes:

    #define WINVER 0x0410
    #define _WIN32_WINDOWS 0x0410
    

    und direkt nach den includes (weil ich das in deinem Code nicht gesehen habe):

    // hinter den includes
    using namespace Gdiplus;
    

    Microsoft hat nämlich GDI+ in einen namespace verpackt..

    MfG



  • danke Probe-Nutzer.....

    aktueller code:

    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <windows.h>
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <gdiplus.h>
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <stdlib.h>
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <string> 
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <sstream> 
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <iostream>
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <stdio.h>
    
    using namespace Gdiplus;
    
    int dc2bitmap(HDC hdc, int width, int height, char *filename);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevIsntance, LPSTR lpCmdine, int nShowCmd)
    {
    	HDC hdc; 
    	RECT rt; 
    	HWND hWnd; 
    	int iBreite, iHoehe = 0; 
    	char szFilename[]="Bitmap.jpeg";
    	int result=0;
    	stringstream text;
    
    	// gdiplus.dll laden:
        HINSTANCE hLib = LoadLibrary("gdiplus.dll");
    
        if(hLib == NULL)
        {
           MessageBox(NULL,"Fehler: gdiplus.DLL konnte nicht geladen werden !","error", 0);
           return 0;
        }
    
    	hWnd=GetDesktopWindow();
    	hdc=GetWindowDC(hWnd); 
    	GetWindowRect(hWnd,&rt); 
    	iBreite = rt.right - rt.left;         // Wir brauchen die Differenz 
    	iHoehe = rt.bottom - rt.top;          // also die Breite und Höhe des Fensters 
    	result=dc2bitmap(hdc, iBreite, iHoehe, szFilename); 
    	ReleaseDC(hWnd,hdc);
    
        text << "Screen saved "<< result;
    
    	MessageBox(NULL, text.str().c_str(), "info", MB_OK | MB_ICONINFORMATION);
    
    	// Aufräumen:
        FreeLibrary(hLib);
    
    	return 0;
    }
    
    int dc2bitmap(HDC hdc, int width, int height, char *filename) 
    { 
       HDC hdc2; 
    
       Graphics graphics(hdc); 
    
       // Create an Image object based on a PNG file. 
       Image  image(L+filename); 
    
       // Draw the image. 
       graphics.DrawImage(&image, width, height); 
    
       // Construct a Graphics object based on the image. 
       Graphics imageGraphics(&image); 
    
       // Alter the image. 
       SolidBrush brush(Color(255, 0, 0, 255)); 
       imageGraphics.FillEllipse(&brush, 20, 30, 80, 50); 
    
       // Draw the altered image. 
       graphics.DrawImage(&image, 200, 10); 
    
       // Save the altered image. 
       CLSID pngClsid; 
       GetEncoderClsid(L"image/png", &pngClsid); 
       image.Save(L+filename, &pngClsid, NULL);
    
       return 1; 
    }
    

    nun kommt das:

    --------------------Konfiguration: screen - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    C:\main.cpp(34) : error C2065: 'stringstream' : nichtdeklarierter Bezeichner
    C:\main.cpp(34) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'text'
    C:\main.cpp(34) : error C2065: 'text' : nichtdeklarierter Bezeichner
    C:\main.cpp(54) : error C2297: '<<' : Ungültig, da der rechte Operand vom Typ 'char [14]' ist
    C:\main.cpp(56) : error C2228: Der linke Teil von '.str' muss eine Klasse/Struktur/Union sein
    C:\main.cpp(56) : error C2228: Der linke Teil von '.c_str' muss eine Klasse/Struktur/Union sein
    C:\main.cpp(159) : error C2065: 'L' : nichtdeklarierter Bezeichner
    C:\main.cpp(159) : error C2664: '__thiscall Gdiplus::Image::Gdiplus::Image(const unsigned short *,int)' : Konvertierung des Parameters 1 von 'char *' in 'const unsigned short *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    C:\main.cpp(176) : error C2065: 'GetEncoderClsid' : nichtdeklarierter Bezeichner
    C:\main.cpp(177) : error C2664: 'enum Gdiplus::Status __thiscall Gdiplus::Image::Save(const unsigned short *,const struct _GUID *,const class Gdiplus::EncoderParameters *)' : Konvertierung des Parame
    ters 1 von 'char *' in 'const unsigned short *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    Fehler beim Ausführen von cl.exe.
    
    screen.exe - 10 Fehler, 0 Warnung(en)
    

    using namespace Gdiplus....hab ich noch nie gesehn;-( bitte hilf mir mit dem speichern des bildes kompremiert....

    thx
    👍



  • markoo schrieb:

    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <windows.h>
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <gdiplus.h>
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <stdlib.h>
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <string> 
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <sstream> 
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <iostream>
    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <stdio.h>
    

    *LOL* Siebenfach hält besser, oder was?



  • *LOL* Siebenfach hält besser, oder was?

    ja *gg* wer weiß was da noch alles kommt*lol* vielleicht noch eine header datei umschreiben....arg;-(

    bitte help mir Probe-Nutzer damit das worked! die error mit stringstream oben...verseh ich überhaupt nicht;-( waaaaaaahhaha das ist ein zeug!;-(((((

    thx 👍



  • also, wie WebFritzi schon angedeutet hat, es reicht einmal die #defines vor alle includes zu setzen.

    Die anderen Fehler entstehen wohl, weil du zwar "using namespace Gdiplus;" verwendest, aber dafür "using namespace std;" verschwinden hast lassen, davon habe ich nichts geschrieben, also wieder rein damit in den Code (aber sonst alles so lassen, nichts ersetzen)

    MfG



  • ok! habs nun so:

    #define WINVER 0x0410 
    #define _WIN32_WINDOWS 0x0410
    #include <windows.h>
    #include <gdiplus.h>
    #include <stdlib.h>
    #include <string> 
    #include <sstream> 
    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    using namespace Gdiplus;
    

    was mach ich da falsch: ????

    int dc2bitmap(HDC hdc, int width, int height, char *filename) 
    { 
       HDC hdc2; 
    
       Graphics graphics(hdc); 
    
       // Create an Image object based on a PNG file. 
       Image  image(L+filename); 
    
       // Draw the image. 
       graphics.DrawImage(&image, width, height); 
    
       // Construct a Graphics object based on the image. 
       Graphics imageGraphics(&image); 
    
       // Alter the image. 
       SolidBrush brush(Color(255, 0, 0, 255)); 
       imageGraphics.FillEllipse(&brush, 20, 30, 80, 50); 
    
       // Draw the altered image. 
       graphics.DrawImage(&image, 200, 10); 
    
       // Save the altered image. 
       CLSID pngClsid; 
       GetEncoderClsid(L"image/png", &pngClsid); 
       image.Save(L+filename, &pngClsid, NULL);
    
       return 1; 
    }
    --------------------Konfiguration: screen - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    C:\main.cpp(148) : error C2065: 'L' : nichtdeklarierter Bezeichner
    C:\main.cpp(148) : error C2664: '__thiscall Gdiplus::Image::Gdiplus::Image(const unsigned short *,int)' : Konvertierung des Parameters 1 von 'char *' in 'const unsigned short *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    C:\main.cpp(165) : error C2065: 'GetEncoderClsid' : nichtdeklarierter Bezeichner
    C:\main.cpp(166) : error C2664: 'enum Gdiplus::Status __thiscall Gdiplus::Image::Save(const unsigned short *,const struct _GUID *,const class Gdiplus::EncoderParameters *)' : Konvertierung des Parame
    ters 1 von 'char *' in 'const unsigned short *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    Fehler beim Ausführen von cl.exe.
    
    screen.exe - 4 Fehler, 0 Warnung(en)
    

    thx 👍



  • Was hast Du damit vor ?

    Image  image(L+filename);
    


  • geeky schrieb:

    Was hast Du damit vor ?

    Image  image(L+filename);
    

    in der msdn stand das so drinenn....will einfahc unter dem filenamen speichern...
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/GDIPlus/GDIPlusreference/classes/imageclass/imagemethods/imagesavemethods/save_39filename_clsidencoder_encoderparams.asp
    das steht da so mit L...was die da wollen!???

    👍 thx



  • bissi gändert:

    int dc2bitmap(HDC hdc, int width, int height, char *filename) 
    { 
       HDC hdc2; 
       Graphics graphics(hdc); 
    
       // Create an Image object based on a PNG file. 
       Image image(filename); 
    
       // Draw the image. 
       graphics.DrawImage(&image, width, height); 
    
       // Construct a Graphics object based on the image. 
       Graphics imageGraphics(&image); 
    
       // Alter the image. 
       SolidBrush brush(Color(255, 0, 0, 255)); 
       imageGraphics.FillEllipse(&brush, 20, 30, 80, 50); 
    
       // Draw the altered image. 
       graphics.DrawImage(&image, 200, 10); 
    
       // Save the altered image. 
       CLSID pngClsid; 
       GetEncoderClsid("image/png", &pngClsid); 
       image.Save(filename, &pngClsid, NULL);
       return 1; 
    }
    
    --------------------Konfiguration: screen - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    C:\Dokumente und Einstellungen\Gerald\Desktop\screen\main.cpp(149) : error C2664: '__thiscall Gdiplus::Image::Gdiplus::Image(const unsigned short *,int)' : Konvertierung des Parameters 1 von 'char *' in 'const unsigned short *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    C:\Dokumente und Einstellungen\Gerald\Desktop\screen\main.cpp(166) : error C2065: 'GetEncoderClsid' : nichtdeklarierter Bezeichner
    C:\Dokumente und Einstellungen\Gerald\Desktop\screen\main.cpp(167) : error C2664: 'enum Gdiplus::Status __thiscall Gdiplus::Image::Save(const unsigned short *,const struct _GUID *,const class Gdiplus::EncoderParameters *)' : Konvertierung des Parame
    ters 1 von 'char *' in 'const unsigned short *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    Fehler beim Ausführen von cl.exe.
    
    screen.exe - 3 Fehler, 0 Warnung(en)
    

    hmm?
    thx 👍



  • Image image(filename);
    

    Sicher das du das willst ? - Die Datei <filename> muss dann schon existieren und mit Hilfe der Datei wird dann nen Bild im Speicher angelegt.
    Außerdem musst Du den String <filename> in Unicode umwandeln (guck dir mal MultiByteToWideChar() an...) und nicht einfach so übergeben 😉

    Nimm statt Image lieber Bitmap, Bitmap ist von Image abgeleitet und kann auch jpegs, pngs etc. speichern. Du kannst damit aber auch nen Bild im Speicher anlegen, was vorher nicht erst als Datei existieren muss - z.B. mit BITMAPINFO und nem Pointer auf Pixeldaten kannste dann nen Bild initialisieren...

    Achja: GetEncoderClsid() ist keine bereits existierende Funktion, sie wird in einem Beispiel in der MSDN/PSDK-Doku angegeben - Die Funktion musst du aus der Doku kopieren (oder dir selber bauen ;D)



  • geeky schrieb:

    Image image(filename);
    

    Sicher das du das willst ? - Die Datei <filename> muss dann schon existieren und mit Hilfe der Datei wird dann nen Bild im Speicher angelegt.
    Außerdem musst Du den String <filename> in Unicode umwandeln (guck dir mal MultiByteToWideChar() an...) und nicht einfach so übergeben 😉

    Nimm statt Image lieber Bitmap, Bitmap ist von Image abgeleitet und kann auch jpegs, pngs etc. speichern. Du kannst damit aber auch nen Bild im Speicher anlegen, was vorher nicht erst als Datei existieren muss - z.B. mit BITMAPINFO und nem Pointer auf Pixeldaten kannste dann nen Bild initialisieren...

    Achja: GetEncoderClsid() ist keine bereits existierende Funktion, sie wird in einem Beispiel in der MSDN/PSDK-Doku angegeben - Die Funktion musst du aus der Doku kopieren (oder dir selber bauen ;D)

    hi!!! hilfe!! ich hab doch vorher schon mit bitmap gearbeitet....HBITMAP aBmp;
    da war ja das problem mit dem kopremierten speichern!!!! deshalb wurde mir geraten image zu nehmen weil man da mit mit der hand kompremieren muss, sondern das geht automatisch!! ich fühl mich jetzt ein bisschen in die irre geführt!!??? was soll ich jetzt tun? help

    Die Datei <filename> muss dann schon existieren und mit Hilfe der Datei wird dann nen Bild im Speicher angelegt.
    

    wie kann ich so ein image-datei anlegen????

    thx 👍


Anmelden zum Antworten