Bildmischer



  • Hi,

    ich suche jemand der mir "für umsonst" (ich weiss dofe wortkombination) helfen kann.
    Ich hatte neulich hier gepostet und mein Thread stieß auf nich sehr grosse akzeptanz ^^, nun habe ich es doch nach 2 1/2 Wochen geschafft es selbst zu programmieren, allerdings sind da immernoch ein oder zwei Sachen die nich tun wie ich will und ich komm absolut nicht weiter.

    Es geht um ein Programm das mir eine grössere Anzahl von Bildern durcheinander mischt.
    Ich bin soweit dasss ich die Bilder auswählen kann und sie theoretisch auch umbenannt werden, nur beim wirklichen speichern der Bilder bzw. beim umnennen hapert es.
    Ach ja nebenbei bemerkt ich bin nicht der hardcore Programmierer, ich versuch mich ab und zu scheiter aber meistens.

    Also wenn jmd von euch den Drang verspührt mir helfen zu wollen, dann bitte so dass ich auch mitkommen.

    Ach ja das ganze wäre wahrscheinlich über ICQ am besten .... 306647075.

    Aber posts hier tuns auch.

    Vorgehen

    Ich nehmen mir die Dateinamen der Bilder über einen OpenDialog in einen String.
    Danach wird der Name des Bildes mit hilfe von Random geänder (alles noch in dem String).
    Jetzt will ich die geänderten Namen wieder auf die Bildr übertragen. Ob die Bilder dazu in einen Unterordner kopiert werden und sie da geändert werden ( also sozusagen zweimal jedes Bild existiert oder ob sie direkt gerenamed werden ist dabei egal).

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     OpenDialog1->Execute();
     liste->AddStrings(OpenDialog1->Files);
     for(int i=0;i<liste->Count;i++)
     {
      int path;
      AnsiString filedir=liste->Strings[i];
      AnsiString search="\\";
      for(int i=filedir.Length();i>0;i--)
      {
       if(filedir.SubString(i,1)==search)
       {
        path=i;
        break;
       }
      }
      AnsiString file=filedir.SubString(path+1,filedir.Length());
      apath=filedir.SubString(1,path);
      ListBox1->Items->Add(file);
      AnsiString filelist=file.Delete(file.Length()-8,5);
      int ran=random(89999)+10000;
      filelist=filelist.Insert((AnsiString)ran,filelist.Length()-3);
      listefile->Add(filelist);
    
      AnsiString fileren=filedir.Delete(filedir.Length()-8,5);
      fileren=filedir.Insert((AnsiString)ran,filedir.Length()-3);
      ListBox2->Items->Add(filelist);
      listeneu->Add(fileren);
    }
    }
    

    Das wäre nun der beschriebene Part.

    Das einzige Problem das ich derzeit habe ist, dass er die wirklichen Bilddateien nicht umbenennt.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    //picsave->Execute();
     for(int i=0;i<ListBox1->Items->Count-1;i++)
     {
    
      AnsiString ordner=apath+Edit1->Text+"\\"+listefile->Strings[i];
      //ListBox2->Items->Add(ordner);
     // RenameFile(liste->Strings[i],listeneu->Strings[i]);
      CopyFile(liste->Strings[i].c_str(),ordner.c_str(),1);
      RenameFile(liste->Strings[i],listeneu->Strings[i]);
    
      }
    
    }
    

    ich benutze den Borland C++ Builder 5
    wäre euch wirklich sehr dankbar wenn mir jmd helfen könnte.

    greetz 4H3ad



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo

    Benutzt den Debugger, und schau bei dem RenameFile, was in den übergebenen Argumenten steht. Verfolge wie dein Programm zu diesen Ergebnissen kommt.

    bis bald
    akari



  • ALso im Debugger sieht es so aus als würde er die Stelle garnicht durcharbeiten.
    Da ich jetzt wie gesagt nicht das über ProgrammierBrain bin steh ich jetzt vor immeroch dem gleichen Problem wie vorher.



  • Hallo

    wenn du nur eine einzige Datei in der ListBox stehen hast, wird die Schleife

    for(int i=0;i<ListBox1->Items->Count-1;i++)
    

    nicht betreten. Die sollte eher so aussehen

    for(int i=0;i<ListBox1->Items->Count;i++)
    

    Desweiteren würd ich den Controls besser aussagekräftige Namen geben. Button1, Button2, ListBox1, Edit1 ... da weiß keiner was gemeint ist.

    bis bald
    akari



  • Hey mega cool, danke.
    Das kleine Detail ist mir jetzt nicht aufgefallen, jetztt gehts.

    Was mir grade aufgefallen ist, dass es wahrscheinlich doch besser wäre wenn die umb enannten Bilder in einen Unterordner kopiert werden wüden.
    Oder was heisst gerade eingefallen, daran hatte ich schon länger gedacht.
    Allerdings fällt mir nicht ein wie ich das machen könnte.

    Für diesen kleinen Tipp wäre ich euch sehr dankbar.

    Ja ich weiss das mit den deklarationen von den Buttons usw. ist nicht so der hit bei mir, da gabs fürher auch immer Punktabzug vom Lehrer ;).
    Allerdings hatte ich auch nich gedacht dass ich den Soure veröffentliche ^^.



  • Hallo

    Was mir grade aufgefallen ist, dass es wahrscheinlich doch besser wäre wenn die umb enannten Bilder in einen Unterordner kopiert werden wüden.
    Oder was heisst gerade eingefallen, daran hatte ich schon länger gedacht.

    Wenn du den fertigen Dateinamen hast, mit den Funktionen ExtractFilePath/ExtractFileName Pfad und Dateiname trennen, Name des Unterverzeichnisses mitsamt Backslash einfügen und wieder zusammensetzen.
    Gegenbenfalls solltest du mit CreateDirectory dafür sorgen, das das Unterzeichnis auch vorhanden ist.

    Ja ich weiss das mit den deklarationen von den Buttons usw. ist nicht so der hit bei mir, da gabs fürher auch immer Punktabzug vom Lehrer ;).
    Allerdings hatte ich auch nich gedacht dass ich den Soure veröffentliche ^^.

    Du sollst es ja auch nicht f+r uns tun. Sondern für dich, wenn du den Quellcode nach einem Jahr Pause wieder anschaust und verstehen willst. Dann wirst du für jede sinnvoll benannte Variable dankbar sein.

    bis bald
    akari



  • [quote="akari"]Hallo

    Wenn du den fertigen Dateinamen hast, mit den Funktionen ExtractFilePath/ExtractFileName Pfad und Dateiname trennen, Name des Unterverzeichnisses mitsamt Backslash einfügen und wieder zusammensetzen.
    Gegenbenfalls solltest du mit CreateDirectory dafür sorgen, das das Unterzeichnis auch vorhanden ist.

    Sorry dass kann ich mir grad nich zusammenreimen wie du mir das erklärt hast.
    Bin nicht so ganz fit ich brauch immer ein bisschen länger für so etwas.
    Also wenn du mir ein bisschen detailierter helfen könntest wäre ich dir sehr verbunden.

    Du sollst es ja auch nicht f+r uns tun. Sondern für dich, wenn du den Quellcode nach einem Jahr Pause wieder anschaust und verstehen willst. Dann wirst du für jede sinnvoll benannte Variable dankbar sein.

    Genau das selbe hatte mein Programmierlehrer mir auch imer gesagt :D.
    Damit hatte er vermutlih auch recht.



  • Hallo

    Als Basisbeispiel

    AnsiString FilePath = "D:\\Verzeichnis\\Datei.dat";
    AnsiString Path = ExtractFilePath(FilePath);
    AnsiString File = ExtractFileName(FilePath);
    AnsiString FileSubPath = Path + "Unterverzeichnis\\" + File;
    

    Allerdings kann ich aus deinem Code herauslesen, das du offenbar eh schon Pfad und Dateinamen getrennt hast. Es wäre also effizienter entweder gleich dort den Subpath einzuschieben, oder aber die beiden Teile bis zur endgültigen Verarbeitung voneinander getrennt zu veralten.

    bis bald
    akari



  • Also ich muss mich wirklich sehr bei dir bedanken.
    Es geht jetzt soweit wunderbar.
    Jetzt verbreite ich das mal an meine Kollegen die sollen ein bisschen testen.

    Allerdings versteh ich grad noch nich warum es jetzt geht

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     CreateDir(apath+Edit1->Text);
     for(int i=0;i<ListBox1->Items->Count;i++)
     {
    
      AnsiString ordner=apath+Edit1->Text+"\\"+listefile->Strings[i];
     // ListBox2->Items->Add(ordner);
     //RenameFile(liste->Strings[i],listeneu->Strings[i]);
      CopyFile(liste->Strings[i].c_str(),ordner.c_str(),1);
     //RenameFile(liste->Strings[i],listeneu->Strings[i]);
    
      }
    
    }
    

    So ist es jetzt wie es funktioniert
    es kopiert die Bilder in ein Subdir und benennt sie um.


Anmelden zum Antworten