[C++] CImage LoadFromResource Problem

Overloader

Cadet 4th Year
Registriert
Jan. 2004
Beiträge
91
Ich will ein *.jpg Bild in mein Programm von einer Resource aus laden. Das sollte ja mit

Code:
bitmap.LoadFromResource(AfxGetInstanceHandle(),IDR_JPG2)
klappen, wenn ich aber das Programm starte kommt immer die Fehlermeldung Expression: hBitmap != 0 in der atlimage.h. Wenn ich es von einer Datei lade klappt es. Ich habe das Bild auch als Benutzerdefinierte Resource ("JPG") eingebunden. Kann mir da jemand helfen?
 
In der atlimage.h steht dazu folgendes:
Code:
inline void CImage::Attach( HBITMAP hBitmap, DIBOrientation eOrientation ) throw()  
{  	
  ATLASSERT( m_hBitmap == NULL );  	
  ATLASSERT( hBitmap != NULL );    
  m_hBitmap = hBitmap;    	
  UpdateBitmapInfo( eOrientation );  
}

Jetzt frag ich mich was diese Zeile bedeutet ATLASSERT( hBitmap != NULL );? Wenn es ungleich NULL ist bedeutet es doch eigentlich das es geladen ist oder irre ich mich?
 
Overloader schrieb:
Jetzt frag ich mich was diese Zeile bedeutet ATLASSERT( hBitmap != NULL );? Wenn es ungleich NULL ist bedeutet es doch eigentlich das es geladen ist oder irre ich mich?

assert überprüft ob die angegebene Bedingung erfüllt ist, was bei dir nicht der Fall zu sein scheint, d.h. bei dir ist hBitmap = NULL.
Ich bin mir nicht sicher, aber ich glaube, dass ::LoadImage() keine *.jpg laden kann und deshalb NULL zurück gibt.
 
Zuletzt bearbeitet:
@EdelSchädel
Wenn Overloader schon mit "Ressourcen" in Programmen rumspielt und deshalb auch mit diesen ganzen MFC/WinAPI Klassendingsbumsen bastelt, dann wird es mit ziemlicher Sicherheit der Microsoft C++ Compiler als Teil des Visual Studios sein.

Oder gibt es noch andere Compiler, die dieses MS spezifische Zeugs können? (Wirklich ernst gemeint; ich frage aus Unwissenheit)
 
Also ich hab das mal ausprobiert mit der GDI+, das sieht dort zwar schön einfach aus, aber funktionieren tuts bei mir nicht. Vielleicht kann ja einer mal ein Beispiel davon bringen (aber nicht eins von der msdn). :D Ich hab mir natürlich auch die anderen Beispiele dort angeschaut, aber das funktioniert so nicht.

Was den Compiler angeht, ich benutze Visual Studio.Net 2003 Standard Edition und schreibe mein Programm mit der MFC.

CImage funktioniert mit jpg Dateien. Das steht in der msdn CImage provides enhanced bitmap support, including the ability to load and save images in JPEG, GIF, BMP, and Portable Network Graphics (PNG) formats
 
Overloader schrieb:
CImage funktioniert mit jpg Dateien. Das steht in der msdn CImage provides enhanced bitmap support, including the ability to load and save images in JPEG, GIF, BMP, and Portable Network Graphics (PNG) formats

Ich glaube das gilt nur für Dateien, denn die werden mit GDI+ geladen, für das Laden von Resourcen wird aber die GDI-Funktion LoadImage() aufgerufen und die kann so weit ich weiß keine *.jpg laden...

Ein Beispiel wie man mit Gdi+ Resourcen laden kann gibt's hier .
 
DAnk eurer Hilfe bzw. den Tip mit GDI+ hab ich hier ein Beispiel gefunden was geht. Ich werde es gleich mal ausprobieren, ob das auch in meinem Programm funzt.

Danke an alle!
 
Boron schrieb:
@EdelSchädel
Wenn Overloader schon mit "Ressourcen" in Programmen rumspielt und deshalb auch mit diesen ganzen MFC/WinAPI Klassendingsbumsen bastelt, dann wird es mit ziemlicher Sicherheit der Microsoft C++ Compiler als Teil des Visual Studios sein.

Oder gibt es noch andere Compiler, die dieses MS spezifische Zeugs können? (Wirklich ernst gemeint; ich frage aus Unwissenheit)

Bis zu CBuilder konnte man bei Borland noch mit Ressourcendateien arbeiten.

Ok, und das CImage war doch schon sehr verräterisch ;)

Allerdings gibt es einen Unterschied zwischen VisualStudio( Visual C++ ) und .NET. Zwar nicht sehr groß, aber es gibt ihn. Und da kann man sich schnell mal verheddern :o


grüssle :)
 
Moin *gähn*.
Ich sehe keinen Unterschied zwischen Visual Studio und Visual Studio.
In beiden IDEs (Integrated Development Environment) kann ich in verschiedenen Sprachen Programme entwickeln.
VS.net ist einfach die neuere Version.
"Visual C++" bedeutet somit nur, dass im VS mit C++ entwickelt wird.

Und den Borland CBuilder habe ich nie zu Gesicht bekommen. Aber um ehrlich zu sein habe ich bisher nicht so ganz begriffen was diese "Ressourcen" eigentlich genau sein sollen.
 
moin,

@Boron

Es macht schon einen Unterschied, ob man VS6 oder VS7 benutzt, da VS7 einige Änderung im Verhalten aufweisst, im speziellen bei API-Calls.

Des weiteren nutzen ein Teil der MFC VS 7 Komponenten schon das .Net Framework welches einen Teil der Funktion zwar kompatibel angibt aber intern anders handelt.
 
Ah, OK.
Und da soll ein Programmierer/Informatiker nicht wahnsinnig werden, bei der Verschmelzung sonst so klar getrennter Bibliotheken, Technologien und Entwicklungsumgebungen ("Der Wurm ist das Spice" Quelle: Der Wüstenplanet) :freak:.
 
Zurück
Oben