screenshot



  • *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 👍



  • markoo schrieb:

    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!???

    Also bei mir steht das da nirgend so - sondern immer nur L"image/png"
    Damit wird afaik dann die Zeichenfolge in Unicode umgewandelt (wenn du direkt ein String-Literal - hieß das so? - im Code stehen hast).
    Da filename bei dir aber als Nicht-Unicode-Zeichenkette vorliegt musst du es mit MultiByteToWideChar entsprechend umwandeln. 😉

    markoo schrieb:

    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?

    HBITMAP ist ein HANDLE zu einem Bitmap - hier war aber jetzt die GDI+-Klasse Bitmap gemeint 😉

    markoo schrieb:

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

    Schau dir mal die Bitmap Constructors an 🙂



  • Also bei mir steht das da nirgend so - sondern immer nur L"image/png"
    Damit wird afaik dann die Zeichenfolge in Unicode umgewandelt (wenn du direkt ein String-Literal - hieß das so? - im Code stehen hast).
    Da filename bei dir aber als Nicht-Unicode-Zeichenkette vorliegt musst du es mit MultiByteToWideChar entsprechend umwandeln. 😉

    int dc2bitmap(HDC hdc, int width, int height, char *filename) 
    { 
       HDC hdc2; 
    
       #define MAX_CHARACTERS 81
       wchar_t file_name[MAX_CHARACTERS];
    
       // String in Unicode umwandeln
       mbstowcs(work, filename, MAX_CHARACTERS);
    
       // Bitmap erstellen
       Bitmap(file_name, FALSE);      // FALSE specifies that color correction is not enabled
    
       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; 
    }
    

    hi bitte schaut mal den code an!!! ich hab jetzt wenigstens mal in unicode gewandelt!! und ne bitmap erstellt ( Creates a Bitmap object based on an image file) was soll ich nun tun??? bitte um help!!!

    thx 👍



  • Hast du auch ein wenig Ahnung von C++?



  • WebFritzi schrieb:

    Hast du auch ein wenig Ahnung von C++?

    ja warum? aber nicht von bitmap;-(

    cu



  • falls du was gegen das define hast....das nicht so wichtig....da gehört oben zu den includes rauf!!!! aber wie mach ich nun das speichern?

    thx 👍



  • // Bitmap erstellen 
    Bitmap(file_name, FALSE);
    

    Was ist das?



  • WebFritzi schrieb:

    // Bitmap erstellen 
    Bitmap(file_name, FALSE);
    

    Was ist das?

    das ist das: Creates a Bitmap object based on an image file.
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/GDIPlus/GDIPlusReference/Classes/BitmapClass/BitmapConstructors/Bitmap_56filename_useIcm.asp

    das wurde mir ja empfohlen!!!!

    thx 👍



  • Nein, du kannst kein C++. Lies dir nochmal ein Tutorial durch!



  • WebFritzi schrieb:

    Nein, du kannst kein C++. Lies dir nochmal ein Tutorial durch!

    hi...habs überlesen...is ja ein constructor;-)

    #define MAX_CHARACTERS 81 
    
    int dc2bitmap(HDC hdc, int width, int height, char *filename) 
    { 
       HDC hdc2; 
    
       Bitmap*     pBitmap;
       wchar_t file_name[MAX_CHARACTERS]; 
    
       // String in Unicode umwandeln 
       mbstowcs(work, filename, MAX_CHARACTERS); 
    
       // Bitmap erstellen 
       pBitmap = new Bitmap(file_name, FALSE);      // FALSE specifies that color correction is not enabled 
    
       delete pBitmap;
    
       return 1; 
    }
    

    passts nun??? wie mach ich das weiter????

    thx 👍



  • OK, du hast's kapiert. 😉 Das new brauchst du aber AFAIK nicht. Du kannst die GDI+ - Objektinstanzen IMHO alle auf dem Stack anlegen.

    EDIT: Bekommst du denn jetzt noch irgendwelche Linkerfehler, oder hast du jetzt alles ordentlich eingebunden gekriegt?



  • WebFritzi schrieb:

    OK, du hast's kapiert. 😉 Das new brauchst du aber AFAIK nicht. Du kannst die GDI+ - Objektinstanzen IMHO alle auf dem Stack anlegen.

    EDIT: Bekommst du denn jetzt noch irgendwelche Linkerfehler, oder hast du jetzt alles ordentlich eingebunden gekriegt?

    so gehts ohne error:

    int dc2bitmap(HDC hdc, int width, int height, char *filename) 
    { 
       HDC hdc2; 
    
       Bitmap* pBitmap; 
       wchar_t file_name[MAX_CHARACTERS]; 
    
       // String in Unicode umwandeln 
       mbstowcs(file_name, filename, MAX_CHARACTERS); 
    
       // Bitmap erstellen 
       pBitmap = new Bitmap(file_name, FALSE);      // FALSE specifies that color correction is not enabled 
    
       delete pBitmap; 
    
       return 1; 
    }
    

    aber das new braucht er anscheinend!!! sonst bekomm ich einen error! was soll ich als nächstes machen???
    danke webfritzi, das du an mich glaubst;-) 👍
    thx 👍



  • markoo schrieb:

    was soll ich als nächstes machen???

    Du sollst die Dokumentation lesen. Wenn noch etwas unklar ist, kannst Du gern nochmal nachfragen, aber vielleicht etwas gezielter.


Anmelden zum Antworten