Bilder in Resource aufrufen
-
Hi,
ich habe 8 Bilder (img1-img8.jpg) als Resource in meinen C++ Builder eingebunden (Projekt ==> Resourcen) habe als Typ "RCDATA" ausgewählt (einzigstes verfügbares), doch wie rufe ich diese Dateien jetzt für ein Bild z.B. auf ?
Image1->Picture->LoadFromFile("./bild1.jpg"); ?????
Könnte mir da jemand weiterhelfen, bin ich auf dem richtigen Weg Bilder statisch zu binden?
Gruß
Schattenfang
-
Hi,
Nimm eine leere Datei und füge nach folgendem Muster ein:
BILD1 BITMAP DISCARDABLE "Bild1.bmp" BILD2 BITMAP DISCARDABLE "Bild2.bmp" BILD3 BITMAP DISCARDABLE "Bild3.bmp" . .
Beachte BITMAP, RCDATA sind anderen Resourcen vorbehalten.
Abspeichern unter zB. bilder.rc.
Datei dem Projekt hinzufügen.
Im BCB unter Tools/RC-Scripts importieren eine RES-Datei erstellen.
Diese wird später in die exe gelinkt. Die Dateigrösse dieser exe nimmt entsprechend zuAufruf im Programm:
void __fastcall TForm1::Button1Click(TObject *Sender) { Image1->Picture->Bitmap->LoadFromResourceName(0,(AnsiString)"BILD1"); } //---------------------------------------------------------------------------
mfg
kpeter
-
Für Bitmaps gibt es Bitmap::LoadFromResourceName (bzw. LoadFromResourceId).
Ansonsten s. http://www.c-plusplus.net/forum/viewtopic-var-t-is-213264-and-highlight-is-ressource.html
-
Perfekt danke, das hat funktioniert nur wie funktioniert es mit einer Resource das ich dessen Inhalt prüfe.
Sprich:
if (Image1->Picture == "Bitmap_1"){ Label1->Caption = "Ja, ist vorhanden!"; }
"Bitmap_1" ist der Resourcenname
PS.: Wenn ich für ImageList in dem Bilderlisten Editor Bilder einfüge sind diese dann statisch geladen und wie benutze ich die Draw Funktion von ImageList um Bilder anzuzeigen?
Wieso funktioniert dannImageList1->Draw(this->Canvas, 200, 200, 0);
Nicht ?
-
Schattenfang schrieb:
.. wie funktioniert es mit einer Resource das ich dessen Inhalt prüfe.
Sprich:
if (Image1->Picture == "Bitmap_1"){ Label1->Caption = "Ja, ist vorhanden!"; }
Prüft man vor der Zuweisung zB so:
HINSTANCE hInst = reinterpret_cast<HINSTANCE>(HInstance); HRSRC hres = FindResource(hInst, "BILD1", RT_BITMAP ); if ( hres ) Image1->Picture->Bitmap->LoadFromResourceName(0,(AnsiString)"BILD1");
Schattenfang schrieb:
ImageList1->Draw(this->Canvas, 200, 200, 0);
Geht doch !?
Du weist aber, dass LoadFromResourceName mit ImageList
nix zu tun hat?mfg
kpeter
-
Ich möchte noch einen kleinen Nachtrag zu diesem Thread geben, da ich gerade reichlich lange an einem Fehler des RCCompilers verzweifelt bin, der nicht so wollte wie ich, obwohl ich scheinbar alles richtig (und genauso wie hier beschrieben) gemacht hatte. Bei der Projekterstellung wurde immer wieder gemeldet:
[RC Fehler] resources.rc(1): [RC Fataler Fehler] resources.rc(1): Compile [Linker Fehler] Unable to open file 'RESOURCES.RES'
Die Datei resources.res konnte nicht geöffnet werden, weil diese
erst gar nicht erstellt wurde! Die resources.rc sah wie folgt aus:PicSoundOff BITMAP DISCARDABLE "D:\Programmierung\JWatcher\sound_no.bmp"
Hinterrund des Fehlers, wie ich durch langes herumprobieren herausgefunden hatte, war die Farbtiefe des BMP. Ich hatte das Bild selber erstellt und mit einer Farbtiefe von 16 Bit abgespeichert. Sobald ich das Bild mit einer Farbtiefe von 8 Bit erstellt habe, hat alles wunderbar funktioniert.