Problem mit Image



  • Ich möchte mit LoadFromFile ein Bild ins Image laden. Beim ersten mal klappt es! Wenn ich dann ein anderes Bild zuordnen möchte sagt er mir, dass er das Bild (Pfad+Datei) nicht öffnen kann!
    Warum??



  • ... Ein kurzer Blick auf meine Glaskugel -
    Mist meine Glaskugel ist kaputt ich kann deinen Code nicht sehen.
    Du mußt ihn wohl leider doch posten.
    Tut mir leid ich lasse sie sofort reparieren 🙄



  • apo schrieb:

    Warum??

    Warum ist der Papst katholisch?

    Wärest Du so gütig und würdest uns Deinen Quellcode mit der Zuweisung zeigen?



  • __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
          Img_Resources->Picture->LoadFromFile("Textures\\Buttons\\resources_on.jpg");
    }
    
    void __fastcall TForm1::Img_ResourcesClick(TObject *Sender)
    {
    show_ressources^=true;
    string newimagename = ProgramPath.c_str();
    newimagename.append("Textures\\Buttons\\resources_");
    if(show_ressources)
            newimagename.append("on.jpg");
    else
            newimagename.append("off.jpg");
    
            Img_Resources->Picture->LoadFromFile(stringTochar(newimagename));
    OpenGLAPPanel1->Repaint();
    }
    

    so lädst du "Programmverzeichniss\Textures\Buttons\resources_on.jpg" (resources_off.jpg) auch wenn du inzwischen das arbeitsverzeichnis gewechselt hast.

    char* stringTochar(string str){
    	char* chr = new char[str.size() + 1];
    	strcpy(chr, str.c_str());
    	return chr;
    }
    

    (hatte dasselbe problem und bin bei der fehlersuche hierrauf gestossen, sorry für den :bump: )



  • @GreyHound

    warum verwendest du nicht einfach ansistring? dann kannste dir die extra funktion komplett sparen...



  • oder wenn schon std::string
    1. auch hier gibt es c_str()
    2. Wieso append? string hat Operatoren (+ += etc.)



  • weil ich ein kompletter newb bin 🙂
    bei mir herrscht momentan noch die devise: never touch working code



  • GreyHound schrieb:

    char* stringTochar(string str){
    	char* chr = new char[str.size() + 1];
    	strcpy(chr, str.c_str());
    	return chr;
    }
    

    ...und mit dieser Funktion hast Du dir auch gleich einen sehr effektiven Speicherfresser gebastelt. Der Speicher, den chr belegt, wird nämlich nirgendwo mehr freigegeben 😉


Anmelden zum Antworten