IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Discussion :

Ajouter une photo automatiquement dans un dossier uiputfile command


Sujet :

Interfaces Graphiques

  1. #1
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut Ajouter une photo automatiquement dans un dossier uiputfile command
    J'ai une forme avec 3axes et 2 buttons(de type pushbutton):

    pushbutton1- pour m'afficher les photos du directoire images(j'ai 2 photos)
    pushbutton2- pour la selection d'une image et l'ajout automatiquement dans le dossier de moi images dans mon cas(command uiputfile) -comment faire cela dans le pushbutton2_callback.(c'est ici le probleme)


    Donc j'ai 3 axes parce que dans le dossier j'ai 2 photos mais je selectionne un fichier jpg dans le pushbutton2_callback et quand j'appuie save il est sauve dans mon dosier l'image selectione avec uiputfile automatiquement.

    Et quand je presse le pushbutton1_callback il m'affiche dans les 3 axes(les 2 vieux photos du directoire et la photo que j'ai ajoute dans le dossier dans le pushbutton2_callback). C'est pour cela que j'ai 3 axes sur ma forme.

    Pushbutton1_callback(liste en axes de la forme les photos qui se trouvent dans le dossier -ca marche caroline m'a aide).


    Si vous pouvez nettoyer un peu mon pushbutton2_callback c'est ca le probleme j'ai essaye avec uiputfile:

    J'attache ici les sources:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function pushbutton1_Callback(hObject, eventdata, handles)
    rep = 'C:\MATLAB71\work\Images';
    img_list = dir(fullfile(rep,'*.jpg'));
    for k=1:length(img_list)
        % Chargement de la kième image
     
        img = imread(fullfile(rep, img_list(k).name));
        %l'afficher dans axesk de la deuxieme forme (utilisation champs
        %dynamique)
        image(img,'Parent',handles.(['axes',num2str(k)]));
     
    end

    Ce callback d'ajout quand je presse save ajouter l'image selectionne dans mon repertoire(C:\MATLAB71\work\Images) ne marche. J'essaye avec uiputfile dans le deuxieme callback c'est ici le probleme:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function pushbutton2_Callback(hObject, eventdata, handles)
    pathname='C:\Matlab71\work\Images';
    [filename, pathname] = uiputfile(...
    {'*.jpg' ;'*.bmp ';'*.tif';'*.gif'},...
    'Save as'); %fenetre de dialogue pour sauver une image selectee dans le directoire specifie par variable pathname
     
    f=fullfile(pathname,filename);
    imwrite(p,f);%sauver l'image selectee dans le dossier specifie par pathname
    %p,f deux variables pour le pathname et filename
     
    if exist(fullfile(pathname,filename),'file') %si l'image jpg existe dans le dossier C:\Matlab71\work\Images 
    %dans ce cas afficher une error dialog avec message corespondant
    errordlg('Le fichier existe deja dans le directoire!','Erreur!');
    end

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function pushbutton2_Callback(hObject, eventdata, handles)
    pathname='C:\Matlab71\work\Images';
    [filename, pathname] = uiputfile(...
    {'*.jpg' ;'*.bmp ';'*.tif';'*.gif'},...
    'Save as'); %fenetre de dialogue pour sauver une image selectee dans le directoire specifie par variable pathname
     
    f=fullfile(pathname,filename);
    imwrite(p,f);%sauver l'image selectee dans le dossier specifie par pathname
    %p,f deux variables pour le pathname et filename
     
    if exist(fullfile(pathname,filename),'file') %si l'image jpg existe dans le dossier C:\Matlab71\work\Images 
    %dans ce cas afficher une error dialog avec message corespondant
    errordlg('Le fichier existe deja dans le directoire!','Erreur!');
    end
    Bonjour,

    Plusieurs remarques sur ton code :

    - D'une part quand tu fait ton IMWRITE, la variable p n'existe pas (ou alors je ne l'ai pas vu ), il est donc fort possible qu'il te mette une erreur.
    - Ensuite ta définition du pathname (1ere ligne) est inutile puisque le pathname est ecrasé dès la ligne suivante par l'appel de UIPUTFILE.
    - De plus, tu ne vérifies pas le cas où l'utilisateur ferait Cancel dans le UIPUTFILE (dans ce cas il te retourne 0 pour le filename et le pathname).
    - Enfin tu écrit ton fichier avant de vérifier son existence donc tu auras à chaque fois le message d'erreur comme quoi le fichier existe (tu viens de le créer) et s'il existait déjà tu l'écrasera à tous les coups...

    Sur ce bonne journée,
    Et bon courage
    Duf

  3. #3
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut J'ai modifie comme tu m'as dis
    J'ai essaye tous ce que tu m'as dit je n'ai aucun erreur de compilation mais toujours il apparait le meme message:





    (quand j'ai selecte une image qui n'est pas dans mon dossier c:\matlab71\work\poze il me dit que cette image existe deja:O. Pourquoi:

    Ici quand j'ai fait ruler mon programme j'ai mis un screenshot ici:

    http://img257.imageshack.us/img257/3305/erreur.png

    la condition de cancel va bien quand je presse save pour une photo selecte il ne m'ajoute pas dans mon dossier.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    [filename, pathname] = uiputfile(...
    {'*.jpg' ;'*.bmp ';'*.tif';'*.gif'},...
    'Save as');
    %[filename, pathname] = uiputfile(...
    %'*.jpg' ;'*.bmp ';'*.tif';'*.gif'},...
    %'Save as'; %fereastra dialog pt.salvarea fisierelor intr-un director
     
    %f=fullfile(pathname,filename);%marquer dans une seul variable le pathname et filename?
     
    %ou separament dans deux variables f=fullfile(filename); %p=fullfile(pathname) et apres imwrite(p,f)
    if ~ischar(filename) 
        errordlg('Eroare!','Nici un fisier selectat!'); %on cancel press
        return;
    end
     
    if exist(fullfile(pathname,filename),'file') %condition si le fichier image %existe dans mon directoire dans mon cas c'est C:\Matlab71\work\poze %et je veux ajouter dinamiquement une photo selecte dans cette dossier quand je presse save boutton j'ai ajoute une image d'exterieur de ce dossier mais il me dit que l'image existe? Comment je dois nettoyer mon fichier?
    errordlg('Fisierul exista deja in director','Eroare!');
    return
    end
    imwrite(f);%sauver l'image selectee dans le dossier specifie par pathname

    J'attends une reponse!

    Merci en avance duf!

  4. #4
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Déjà il y a un problème, tu ne récupère jamais ton image, tu ne peux pas sauvegarder une donnée que tu n'as pas. En plus la fonction IMWRITE prend 2 arguments en entrée : l'image et le nom du fichier donc ton code ne peux effectivement pas marcher...

    Quand à récupérer ton image, ca dépend simplement de comment et où elle est stockée.

    @+
    Duf

    Edit : En plus, j'ai oublié mais tu as commenté la ligne où tu définis ton nom de fichier (la variable f), cette variable n'existe donc pas, d'où une autre source d'erreur...

  5. #5
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Ok j'ai nettoye comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    [filename, pathname] = uiputfile(...
    {'*.jpg' ;'*.bmp ';'*.tif';'*.gif'},...
    'Save as');
     
    f=fullfile(pathname,filename);
     
    if ~ischar(filename) 
        errordlg('Eroare!','Nici un fisier selectat!'); %on cancel press
        return;
    end
     
    if exist(fullfile(pathname,filename),'file') %condition si le fichier image %existe dans mon directoire dans mon cas c'est C:\Matlab71\work\poze %et je veux ajouter dinamiquement une photo selecte dans cette dossier quand je presse save boutton j'ai ajoute une image d'exterieur de ce dossier mais il me dit que l'image existe? Comment je dois nettoyer mon fichier?
    errordlg('Fisierul exista deja in director','Eroare!');
    return
    end
    imwrite(img,f);%sauver l'image selectee dans le dossier c:\matlab71\work\poze specifie par la variable f
    Ok. L'image comme tu as vu dans le printscreen s'appele p2.jpg et c'est dans le chemin c:\matlab71\work. Ce que je veux faire c'est de prelever cette image quand j'appuie save button d'open dialog de me mettre dans mon dossier qui est c:\matlab71\work\poze.


    J'espere avoir bien explique ce que je veux faire.


    J'ai la meme errreur ici:

    http://img257.imageshack.us/img257/3305/erreur.png




    Cordialment,

    Mihai

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Euh, je ne peux pas accèder à ton lien (pb de firewall), pourrais-tu mettre les erreur que tu obtiens sous forme de texte tout simplement?

    Sinon, je suis pas sur d'avoir tout bien compris mais le problème reste toujours le même, il te faut définir à un moment où à un autre la valeur de img, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    % Demande à l'utilisateur quelle image lire
    [input_file, input_dir] = uigetfile;
    if (input_file == 0); return; end;
     
    % Lecture de l'image
    img = imread(fullfile(input_dir, input_file));
     
    % Suite du code ....
    Sachant que si c'est vraiment çà que tu veux faire, il n'est pas utile d'utiliser IMREAD/IMWRITE mais il suffit simplement de copier le fichier sélectionné avec COPYFILE.

  7. #7
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par duf42 Voir le message
    Euh, je ne peux pas accèder à ton lien (pb de firewall), pourrais-tu mettre les erreur que tu obtiens sous forme de texte tout simplement?

    Sinon, je suis pas sur d'avoir tout bien compris mais le problème reste toujours le même, il te faut définir à un moment où à un autre la valeur de img, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    % Demande à l'utilisateur quelle image lire
    [input_file, input_dir] = uigetfile;
    if (input_file == 0); return; end;
     
    % Lecture de l'image
    img = imread(fullfile(input_dir, input_file));
     
    % Suite du code ....
    Sachant que si c'est vraiment çà que tu veux faire, il n'est pas utile d'utiliser IMREAD/IMWRITE mais il suffit simplement de copier le fichier sélectionné avec COPYFILE.
    Ok est alors comment je fais avec copyfile prelever un fichier?

    j'ai donne help copyfile en command window

    [SUCCESS,MESSAGE,MESSAGEID] = COPYFILE(SOURCE,DESTINATION,MODE)

    Et j'essaye comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    % Demande à l'utilisateur quelle image lire
    [input_file, input_dir] = uigetfile;
    if (input_file == 0); return; end;
     
    % Lecture de l'image
    img = imread(fullfile(input_dir, input_file));
     
    [filename, pathname] = uiputfile(...
    {'*.jpg' ;'*.bmp ';'*.tif';'*.gif'},...
    'Save as');
     
    f=fullfile(pathname,filename);
     
    if ~ischar(filename) 
        errordlg('Eroare!','Nici un fisier selectat!'); %on cancel press
        return;
    end
     
    if exist(fullfile(pathname,filename),'file') %condition si le fichier image %existe dans mon directoire dans mon cas c'est C:\Matlab71\work\poze %et je veux ajouter dinamiquement une photo selecte dans cette dossier quand je presse save boutton j'ai ajoute une image d'exterieur de ce dossier mais il me dit que l'image existe? Comment je dois nettoyer mon fichier?
    errordlg('Fisierul exista deja in director','Eroare!');
    return
    end
    [SUCCESS,MESSAGE,MESSAGEID] = COPYFILE('C:\Matlab\work','C:\Matlab\work\poze','f')
    %imwrite(img,f);%sauver l'image selectee dans le dossier c:\matlab71\work\poze specifie par la variable f
    J'ai tente comme ca. Nettoye moi s'il te plait le fichier si tu vois quelque chose bizarre.

    Merci d'avance!

    On peut parler sur messenger mihaispr id le soir je rentre apres 7heures. Fais-moi un add et aussi je te fais une requete pour devenir amis sur ton profil.

    Merci !

    Cordialment,
    Michel

  8. #8
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Normalement ton code doit fonctionner seulement là tu copie les répertoires complets, pour faire ce que tu veux ca serait plus logique de mettre les noms de fichiers.

    De plus, si tu utilises COPYFILE tu n'as plus besoin du IMREAD...

    A toi de tester et de voir si ca marche comme tu veux (ou pas)

  9. #9
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut Mon code fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
     
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    [filename,pathname] = uiputfile('default','Salveaza-ti poza dorita in folderul dorit');
     
    if pathname == 0 %daca utilizatorul apasa butonul cancel iese din callback
        return
    end
    %construieste numele caii pt.locatia de salvare
    saveDataName = fullfile(pathname,filename); 
     
    %salveaza fisierul selectat in calea selectata
    hgsave(saveDataName);
    Mon code fonctionne mais j'ai une petite probleme.Sur ma forme il y a un pushbutton1 seulement.

    Bon je presse le button je selectionne le fichier et le dossier ou je veux sauver le fichier. Bon ca marche(s'il existe deja un nom dans le dossier ou je veux sauver pour le fichier que j'ai selecte il me pose la question de le remplacer c'est logique et je dis oui).


    La question stupide c'est quand je navigue sur ce dossier je vois le fichier sauve (image1.jpg par example) mais le probleme est quand je lance le jpg il me dit:

    NO Preview available


    Pourquoi?


    Tester s'il vous plait le code il suffit de placer une composante pushbutton sur la forme et de copier le code.


    Merci d'avance.

    Sauver sur le desktop le fichier image et puis lancer le jpg et il n'affiche pas l'image

    Je suis fou ou il est n'est pas bon c'est que j'ai fais?


    Merci d'avance j'attends ce soir le reponse s'il vous plait!

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 307
    Points : 52 887
    Points
    52 887
    Par défaut
    Citation Envoyé par mihaispr Voir le message
    quand je lance le jpg il me dit:

    NO Preview available:O
    Qui te dit ça ? MATLAB ou le système d'exploitation (Windows, Linux,...) ?

  11. #11
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Pas matlab.


    Il mis sur le desktop ou je lui ai demande l'image dans un dossier par exemple.

    Et quand je lance de ce dossier l'image je ne vois pas l'image il me dit no preview available

    Pourquoi?

    Parce que je veux voir l'image pour lister pour la deuxieme fois le dossier dans mon GUI avec ce nouvelle photo ajoute

    Et c'est tres grave s'il me dit ca.

    Ici un printscreen comme apparait du nouveau dossier ou j'ai stoque mon image:

    http://img15.imageshack.us/img15/215...ropenimage.png



    Dans le vieux dossier le photo apparait corectement quand je lance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter des Controles automatiquement dans une collection
    Par dragondumond dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/05/2013, 16h57
  2. comment ajouter une photo dans une rubrique ?
    Par diabablo dans le forum WinDev
    Réponses: 5
    Dernier message: 22/12/2010, 20h23
  3. Sauver une image automatiquement dans un dossier des photos
    Par mihaispr dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 14/03/2009, 08h14
  4. [MySQL] affichage d'une photo contenu dans un dossier upload et base de données
    Par keurdeloup45 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/01/2009, 16h39
  5. Insérer une ligne automatiquement dans une autre tab
    Par davyd dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/03/2005, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo