Pfad des geladenen Bildes bei TJPEGImage herausfinden



  • Hallo zusammen!
    Hab schon alles mögliche versucht, auch die Methoden von TJPEGImage durchgesucht, aber ich finde keine Möglichkeit den Pfad der aktuell geladenen JPEG dieser herauszufinden..

    Würd das gern so machen:

    TJPEGImage *jpegfoto = NULL;
    ...
    ...
    String Pfad = jpegfoto->....
    

    Hat wer eine Ahnung, wie ich da ran komme?
    Grüße,
    halloei



  • Hallo,

    verstehe nicht ganz: Um ein JPEG zu laden, musst du doch den Pfad kennen???

    MfG



  • und den musst du dir dann merken.



  • Ich kenne den Pfad nicht, da die JPEG mit einem "OpenPictureDialog" geladen wird!
    Natürlich könnte man manuell nachsehen, wo sich das Bild befindet, aber das ist ja nicht Sinn der Sache..
    Funktioniert es also so nicht?



  • Im OpenPicturDialog suchst du doch das Bild auch mit einem Pfad heraus. Dieser Pfad steht in dessen Eigenschaft FileName. In TJPEGImage steht der nicht.



  • Uff.. schwer zu erklären, was ich da vorhabe..
    Ich werde damit mal ein wenig rumprobieren..
    Jedenfalls schonmal danke 🙂



  • Also..
    Mein Problem ist wohl, dass ich versuche, mit zwei versch. TJPEGImages auf ein Bild zuzugreifen. Wenn dieses Bild das zweite Mal geladen werden soll, bekomm ich eine Fehlermeldung, dass auf dieses nicht zugegriffen werden konnte..
    Liegt das daran, dass der erste TJPEGImage bereits drauf zugreift? Wenn ja, wie kann man den Zugriff beenden?
    Grüße



  • 😕 uff... schwer dir zu helfen, wenn du nichtmal beschreiben kannst, wo das Problem liegt... 😞



  • halloei schrieb:

    Mein Problem ist wohl, dass ich versuche, mit zwei versch. TJPEGImages auf ein Bild zuzugreifen. Wenn dieses Bild das zweite Mal geladen werden soll, bekomm ich eine Fehlermeldung, dass auf dieses nicht zugegriffen werden konnte..

    Zeig mal n bissl Code bitte.

    Edit: Und was für eine Fehlermeldung? (Kann man Alles posten!)



  • Danke für deine schnelle Hilfe..
    Ich denke, dass alles zu posten ein wenig zu viel ist. Ich programmiere gerade den MSN-Messenger nach.

    Es geht darum:
    Form2 sind die Einstellungen, wo man ein neues Anzeigebild laden kann.
    Dieses wird in Form2 auch direkt in einer Vorschau angezeigt.
    Nun muss der Compiler zwischen dem "OK" (Speichern) und dem "Cancel" (Abbrechen) Button unterscheiden.

    Wenn OK gedrückt wurde:
    - Anzeigebild-Vorschau in Form2 muss bleiben
    - Anzeigebild über der Kontaktliste (Form1) muss geändert werden

    Wenn Cancel gedrückt wurde:
    - Anzeigebild-Vorschau in Form2 muss vorheriges Bild anzeigen
    - Anzeigebild über der Kontaktliste (Form1) bleibt

    Wenn "Kein Bild anzeigen" gedrückt wurde:
    - Ein Bild (nur Umrisse eines Kopfes) wird eingeblendet

    ..Wo genau das Problem nun liegt, weiß ich grad selbst nicht.. Ich versuche dir mal ein wenig Code zu posten.

    void __fastcall TForm2::BCancelClick(TObject *Sender)
    {
      TImage1->Picture->Assign(Form2->OldUserpic);
      Close();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm2::BBrowseClick(TObject *Sender) //öffnet OpenPictureDialog
    {
      if (OpenPictureDialog1->Execute())
      {
       //Form1->Userpic->LoadFromFile(OpenPictureDialog1->FileName);
       TImage1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
      }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm2::KeinBildAnzeigenClick(TObject *Sender)
    {
      Form1->TImage1->Picture->Assign(Form1->NoUser);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm2::OKClick(TObject *Sender)
    {
       Form1->Userpic->LoadFromFile(Form2->OpenPictureDialog1->FileName);
       Form1->TImage1->Picture->Assign(Form1->Userpic);
       Close();
    }
    //---------------------------------------------------------------------------
    

    ..Ich glaub, ich würd da nicht so fix durchblicken. Tu ich eigentlich auch nicht, obwohl ichs geschrieben habe.

    Was z.B. gerade nicht funktioniert ist, dass das Programm das NoUser-Bild nicht übernimmt, wenn man auf den Button klickt.

    Ich hoffe du kannst mein Problem ein wenig nachvollziehen
    Grüße



  • halloei schrieb:

    [...]
    Was z.B. gerade nicht funktioniert ist, dass das Programm das NoUser-Bild nicht übernimmt, wenn man auf den Button klickt. ...

    Ok, das ist jetzt also das Einzige Problem? Wenn du auf "kein Bild anzeigen" drückst wird auf Form1 das richtige Bild zugewiesen, aber: Wenn man dann auf Ok klickt um das Form2 zu schliessen, wird ja wieder das Bild geladen und zu Form1->TImage1 zugewiesen welches zuletzt mit dem OpenPictureDialog1 geöffnet wurde...

    Sieht aus wie ein Logikproblem was du da hast... am Besten du malst dir mal einen kleinen Ablaufplan - bildlich sieht man oft besser, wo man etwas besser gestalten könnte.

    Zweckmäßig wäre hier vielleicht auch so ein "Übernehmen" Button, wie man ihn von vielen Programmen kennt. Dann hast du einen Knopf mehr und kannst die Aufgaben besser trennen.

    So, ich mach jetzt Feierabend.

    MfG



  • Einen Übernehmen-Button habe ich drin, nur ist ja außer das "Close();" derselbe Code wie der OK-Button..
    Alles klar, ich mach mich dann nochmal ran.
    Danke für die Antworten und einen schönen Abend noch!
    Grüße



  • Guten Morgen,

    hallloei schrieb:

    Einen Übernehmen-Button habe ich drin, nur ist ja außer das "Close();" derselbe Code wie der OK-Button..

    Das meine ich mit Logikproblem - wenn 2 Buttons (fast) dasselbe machen, läuft was schief beim Programmieren. 😉

    MfG



  • @hallloei
    Wie wärs, wenn du die Bilder nach dem laden in eine Liste packst und dann daraus lädst. Da musst du das nicht immer neu machen und du brauchst dir nur die Indizes zu merken.



  • @Braunstein: Wenn ich mich mal kurz einmischen darf: Falls ich Alles richtig verstanden habe, geht es darum 1 Bild (Benutzerbild in einem Messenger) auszuwählen und zu laden. Warum sollte man da eine Liste anlegen?



  • Wenn ich das richtig verstanden habe, will er das Bild dem entsprechneden User zuordnen. Bei mehreren Usern würde sich eine Liste schon anbieten. Wenn er nur ein Bild hätte müsste er ja nicht umschalten. 🙂



  • Hallo

    beim Start der Anwendung wird Bild1 geladen -> in dem Moment musst du den Pfad kennen. Der User ändert nun das Bild und lädt Bild2 ins Image. Den Pfad von Bild1 hast du dir natürlich vorher (direkt nach dem Laden) gespeichert. Klickt der Benutzer nun auf "Cancel" lädt sich Bild1 - dessen Pfad du ja kennst - wieder ins Image.
    Andernfalls eben nicht! Und damit später auf alle Bilder zugegriffen werden kann solltest du die Pfade aller Bilder irgendwo ablegen. Bei einem Messenger-System wird das sicherlich eine Datenbank sein.

    Alternativ kannst du auch direkt die Bilder in die DB laden und Usern zuordnen. So kann sich der lokale Pfad ändern, oder der Nutzer sogar das Bild vom PC löschen und es ist trotzdem noch da.

    mfg, Micha!



  • Hallo!
    Danke für die Antworten. Mit Datenbanken bin ich leider noch nicht soweit..
    Hab das Problem jetzt gelöst; vielleicht nicht ganz so professionell, aber es funktioniert 😃

    Mit der Liste der Bilder.. Ist es möglich ein Fenster aufzurufen, wo man wie in einer ListBox eine Liste der bereits geladenen Bilder hat, die man von da aus wieder laden kann? Ist aber doch sicher etwas schwierig..
    Grüße!

    //Edit: Hab mich jetzt auch mal angemeldet 😉



  • Hallo,

    sicher ist das möglich. Du musst jedesmal wenn ein neues Bild geladen wird den Pfad irgendwo speichern (Textdatei // Ini (TIniFile) // Registry (TRegistry) // Datenbank) und dann entsprechend wieder auslesen...

    mfg, Micha!



  • //Vielen dank, erledigt!


Log in to reply