Bitmap ist ungültig... Wieso?
-
Hallo
ich habe ein Problem und zwar habe ich eine ListBox1 und ein Edit1 Feld.
In der ListBox1 stehen 3 Dinge Drinne wenn ich eins anklicke soll er den Text ins Edit1 Feld schreiben, habe ich ERSTMAL so gelöst:
if(ListBox1->ItemIndex==0){ Edit1->Text="Test"; }
Gleichzeitig soll er aber auch ein Image1 Bild laden was den selben Namen hat wie im Edit1 Feld steht.
ich habe also folgenden code:
if(ListBox1->ItemIndex==0){ Edit1->Text="Test"; Image1->Picture->LoadFromFile(ExtractFilePath(ParamStr(0)) + "Bilder\\" + Edit1->Text + ".bmp"); }
Sobald ich aber dann ein Item anklicke kommt eine Fehlermeldung und zwar steht da:
Im Projekt1.exe ist eine Exeption der Klasse EInvalidGraphic aufgetreten. Meldung 'Bitmap ist ungültig'
Wieso ist das Bitmap ungültig ? die Adresse stimmt das Bild ist mit dem Namen drinne.
Bitte um hilfe
LG
Malcolm
-
Hallo Malcom,
so kannst Du eine Bitmap korrekt laden und zuordnen:
AnsiString zFile; Graphics::TBitmap *bmp = new Graphics::TBitmap(); // BMP Image anlegen zFile="c:\\test.bmp"; if(FilesExists(zFile)==false) { ShowMessage("File nicht gefunden!?\r\r=> "+zFile); return; } bmp->LoadFromFile(zFile); // Bild laden Image->Picture->Bitmap=bmp; // zuordnen delete bmp; // Grafik löschen
Mit der Listbox geht eleganter:
Integer iInd; AnsiString zTxt; iInd=Listbox->ItemIndex; if(iInd==-1) { ShowMessage("Keine Auswahl"); return; } zTxt=Listbox->Items->Strings[iInd]; zFile="c:\\"+zTxt+".bmp"; ShowMessage("Fileauswahl: "+zFile); // Info ausgeben
Gruss Stefan
-
Super danke schön für die Antwort.
Also ich habe es gleich umgesetzt ich weis nicht ob ich zu blöde bin aber ich habe immernoch die selbe Fehler meldung
Ich poste mal den code jetzt:
void __fastcall TForm6::onclicklistbox(TObject *Sender) { AnsiString zFile; Graphics::TBitmap *bmp = new Graphics::TBitmap(); zFile="c:\\test.bmp"; if(FileExists(zFile)==false){ ShowMessage("File nicht gefunden!?\r\r=> "+zFile); return; } bmp->LoadFromFile(zFile); Image1->Picture>Bitmap=bmp; delete bmp; Integer iInd; AnsiString zTxt; iInd=ListBox1->ItemIndex; if(iInd==-1){ ShowMessage("Keine Auswahl"); return; } zTxt=ListBox1->Items->Strings[iInd]; zFile="c:\\"+zTxt+".bmp"; ShowMessage("Fileauswahl: "+zFile); } //---------------------------------------------------------------------------
-
Erstmal fehlt dort noch ein delete:
if(FileExists(zFile)==false){ ShowMessage("File nicht gefunden!?\r\r=> "+zFile); delete bmp; // <--- return; }
Ansonsten scheint der Fehler ja in der Grafik zu liegen. Kannst du die Datei denn sonst öffnen? Mit Paint oder so?
-
Also die Bilder kann ich öffnen und anschauen ja ...
Ich habe aber mal ein anderes .bmp genommen und das geht also werden die Bilder wohl irgendwie kaputt sein.
Danke euch für die Hilfe
Liebe Grüße
Malcolm*freu*
-
Evtl. ist deine Datei intern gar keine BITMAP, sondern ein anderes Dateiformat (z.B. JPEG oder PNG) und die Datei ist einfach als ".bmp" umbenannt.
Schau mal mit IrfanView o.ä. das Dateiformat dieser Datei an (Menüpunkt: Image\Information). Zur Not konvertieren oder aber TJPEGImage benutzen.
-
Th69 schrieb:
Schau mal mit IrfanView o.ä. das Dateiformat dieser Datei an..
Entweder so, oder wenn man selbst eine Routine einbinden will, prüft man vor dem Einlesen den Datei-Header der Grafik. In den
ersten beiden Byte stehen zB für eine Bitmap BM. Andere Dateiformate entsprechend. Selber austesten. Hier mal der Schnipsel:FILE* infile = NULL; BITMAPFILEHEADER bmfh; ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER)); if ( (infile = fopen("Bilder\\Test.bmp", "rb")) != NULL ) { fread(&bmfh, sizeof(BITMAPFILEHEADER),1, infile); fclose(infile); } // nun kann man bmfh.bfType auswerten WORD bfType = bmfh.bfType; // 0x4d42 für Bitmap;
mfg
kpeter