Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Bitmap lädt nicht immer mittels LoadImage Funktion

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.11.2012, 00:19 Uhr
~Paddle
Gast


Hallo,

Ich programmiere mittels Dev-Cpp Editor eine Winapi Anwendung (Win32) und habe erfolgreich mittels der LoadImage Funktion ein Bild laden können. Dieses Bild befindet sich im selben Ordner wie die ausführbare Datei.


C++:
hbmp = (HBITMAP) LoadImage(NULL, "test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);



Problem: Wenn ich ein anderes bitmap, auch aus dem selben Ordner, versuche zu laden, gibt hbmp NULL zurück. Das andere Bitmap, übrigens mit dem Namen "bp.bmp", wird nicht angezeigt, obwohl es sich im selben Ordner wie "test.bmp" befindet. Die Frage ist wieso?
bp.bmp wurde übrigens mit Corel PhotoPaint erstellt, und test.bmp mit paint.

Eigene Ideen / Ansätze:

- Vielleicht war der Name der Datei anfangs mit über 20 chars zu lang, denn die bitmap hieß vorher anders und länger, aber daran lag es nicht. Ich weiß nicht in wieweit "LPCTSTR lpszName" von der Größe her beschränkt ist. Wie gesagt, das war's auch nicht.

- ich habe bp.bmp mal in Paint geladen und von dort auch nochmal gespeichert und getestet, da ich nicht weiß, wie die Programme intern eine Bitmap unterschiedlich speichern, denn Bitmap ist ja nicht gleich Bitmap. Aber auch das funktioniert nicht.

- Wenn ich mit Paint eine neue Bitmap erstelle, die ich test2.bmp nenne, funktioniert es merkwürdiger weise aber wieder. Er zeigt diese Bitmap also an.

Woran liegt das also? Es kann auch wirklich an Dev-Cpp liegen, denn ich hab das Gefühl, dass die Dateien, wenn sie geändert werden, nicht immer aktualisiert werden. Aber er erkennt ja, dass ich eine neue Bitmap versuche zu laden, denn "hbmp" kriegt ja einen neuen Wert, den ich auch abfrage.

Ich weiß da momentan echt irgendwie nicht weiter. Aber vielleicht ist das ja einem von euch schonmal ähnlich passiert?

Danke für schnelle Hilfe,
Paddle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.11.2012, 07:00 Uhr
Hans
Library Walker
(Operator)


Hi,

wirklich wissen tu ich es auch nicht, aber ich vermute, dass es was mit dem internen Aufbau der Bitmapdatei zu tun hat. Das BMP-Format gibt es ja in verschiedenen Versionen, wie der Wikipedia zu entnehmen ist. Ich vermute, dass irgendwo im Header der Bitmapdatei was eingetragen ist, das der LoadImage-Funktion "nicht gefällt", und sie deshalb einen Fehler diagnostiziert. Das müsste sich mit einem Hexeditor überprüfen lassen.
Ansonsten versuch mal mit einer separaten Bibliothek für BMP-Dateien, die Bilder zu laden. Eine mögliche ist ja im Wikipedia-Artikel unten verlinkt. Es gibt aber auch noch andere, z.B. hier: http://paulbourke.net/dataformats/bmp/

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.11.2012, 12:12 Uhr
TOSHMAX



Was gibt denn GetLastError() nach dem LoadImage-Aufruf aus. Vielleicht lässt sich damit etwas anfangen.

Vermutlich liegt es aber wirklich am Format, dass nicht gelesen werden kann (obwohl das Format von Microsoft erfunden wurde :screwy. Du kannst mal versuchen das Bild von Corel nach Paint zu kopieren (statt es zu öffnen und nochmals zu speichern) und dann als 24-bit BMP speichern. Falls nichts geändert wird, glaube ich dass Paint das Bild 1-zu-1 speichert, wie es geladen wurde.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.11.2012, 14:10 Uhr
~Paddle
Gast


Hey,

(Antwort auf die zweite Antwort)

Ich hatte gestern Abend noch einiges probiert.
GetLastError gibt aus: "Der Vorgang wurde erfolgreich beendet." Kann sein, dass ich die Funktion falsch verwende, da ich ja mit Winapi ziemlich neues Zeugs persönlich mache. GetLastError wird an FormatMessage übergeben und dann via MessageBox ausgegeben. (Nach LoadImage direkt) Wenn der Weg so stimmt, ist es wenig hilfreich

Ich hab mal auch überprüft, ob das Verzeichnis wirklich gleich bleibt mittels GetCurrentDirectory() und das ist auch wirklich der Fall. Daran liegts nicht.

Übrigens die Idee mit in Paint laden und speichern hatte ich ja auch zu allererst probiert. Steht auch glaube ich oben im allerersten Post.
Jap steht es:


Zitat:
- ich habe bp.bmp mal in Paint geladen und von dort auch nochmal gespeichert und getestet, da ich nicht weiß, wie die Programme intern eine Bitmap unterschiedlich speichern, denn Bitmap ist ja nicht gleich Bitmap. Aber auch das funktioniert nicht.


Wenn also LoadImage ein Problem mit unterschiedlichen Bitmaps hat, wovon ich momentan ausgehe, dann übernimmt der von Corel das "falsche" Bitmap und ändert das in Paint nicht nochmal. Wahrscheinlich, weil die interne Aufteilung der Bitmap (Header usw.) beim Erstellen festgelegt wird.

Die Frage ist also welche Bitmaps genau LoadImage akzeptiert. Wenn ich das wüsste, könnte ich ja mit der Corel Projektdatei einfach andere Bitmap Formate exportieren. Ich werde sonst einfach nachher mal alle ausprobieren. Wenn die Theorie stimmt, muss ja eines dieser exportierten Formate passen. Falls nicht...

Dann vielen Dank auch für die erste Antwort, weil dann muss ich mal andere Funktionen verwenden, um die Bitmap anzeigen zu lassen. Falls wem aber noch was ganz anderes einfällt, immer her damit

Gruß,
Paddle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.11.2012, 14:21 Uhr
TOSHMAX



Ich habe schon gelesen, dass du es versucht hast. Deshalb solltest du es folgendermaßen versuchen:
Paint - Neue Datei, Bitmap aus Corel Kopieren und in Paint in die Leere Einfügen, dann speichern als 24-bit Bitmap

24-bit sind, soweit ich weiß, bei den WinAPI-Bitmaps standard. Es kann sein, dass Corel sie mit 32-bit exportiert. Das ist zwar erlaubt, aber es kann sein, dass LoadImage damit nicht umgehen kann. Auch das wäre einen Versuch wert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.11.2012, 17:16 Uhr
~Paddle
Gast


Heyho,

Das ist auch die Lösung. So hatte ich es eigentlich gestern schon probiert. Aber scheinbar, weil ich gestern automatisch unter Paint gespeichert habe, hat er es wieder als falsche Bitmap gespeichert. Diesmal habe ich explizit 24 Bit als Typ gewählt.

Fazit: Funktion LoadImage brauch eine 24 Bit Bitmap.

Danke für die Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: