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

C# Discussion :

Copier une image dans le dossier de l'application


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Points : 45
    Points
    45
    Par défaut Copier une image dans le dossier de l'application
    Salut,
    Dans mon application, j'utilise un open file dialog pour choisir une image, l'afficher dans un form, et puis enregistrer son lien dans la base de données. Je voudrais savoir comment faire pour copier l'image dans le dossier de l'application parce que ce sera plus pratique si j'exécute l'application sur un autre pc.
    Je demande votre aide.
    Merci d'avance.

  2. #2
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pictureBox1.Image.Save(Application.StartupPath);

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Points : 45
    Points
    45
    Par défaut
    ça me donne cette erreur:
    A generic error occured in GDI+

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Ton fichier est bloqué par l'affichage. Fait ta copie avant de l'afficher

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Points : 45
    Points
    45
    Par défaut
    Voilà ce que j'ai écris,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myBitmap2.Save(Application.StartupPath);
                    pictureBox1.Image = myBitmap2;
    et j'ai toujours la même erreur

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    ton erreur peut venir des droits d'écritures dispo ou pas sur ton poste.

    J'ai eu le soucis il y a quelques jours sous Windows Seven.

    Je voulais betement écrire sur c:\ et celà ne fonctionnait pas (pourtant, je suis "Super Administrateur" de ma machine)...

    Enfin, ca peut-etre une piste

  7. #7
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Citation Envoyé par krolis Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myBitmap2.Save(Application.StartupPath);
                    pictureBox1.Image = myBitmap2;
    erreur
    Ce qu'il faut prendre en compte c'est la manière de créer ton myBitmap2.
    Moi je fais comme suit et ça permet de libérer ma ressource image...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fsImg = new FileStream(imgPath, FileMode.Open, FileAccess.Read);
    myBitmap2= Image.FromStream(fsImg);
    fsImg.Close();

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Points : 45
    Points
    45
    Par défaut
    Voilà la fonction que j'ai écris.
    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
    private void SelectTextFile()
            {
                OpenFileDialog dialog = new OpenFileDialog();
                dialog.Filter = "Image Files|*.jpg;*.gif;*.bmp;*.png;*.jpeg";
                dialog.InitialDirectory = "MyPictures";
                dialog.Title = "Select a text file";
                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    FileStream fsImg = new FileStream(dialog.FileName, FileMode.Open, FileAccess.Read);
                    Bitmap myBitmap = new Bitmap((Bitmap)Image.FromStream(fsImg));
                    Bitmap myBitmap2 = new Bitmap(myBitmap, new Size(150, 175));
                    fsImg.Close();
     
                    pictureBox1.Image.Save(Application.StartupPath);
                    pictureBox1.Image = myBitmap2;
     
                }
     
            }
    Mai ça me donne le bug suivant dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pictureBox1.Image.Save(Application.StartupPath);
    Object reference not set to an instance of an object.

  9. #9
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dialog.Filter = "Image Files|*.jpg;*.gif;*.bmp;*.png;*.jpeg";
    dialog.Title = "Select a text file";
    j'aime bien ton humour...
    Bon plus sérieusement...
    il faut assigner l'image au PictureBox avant d'essayer de la sauver...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Bitmap myBitmap2 = new Bitmap(myBitmap, new Size(150, 175));
    fsImg.Close();
    pictureBox1.Image = myBitmap2;                
    pictureBox1.Image.Save(Application.StartupPath);

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par ppphil Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dialog.Filter = "Image Files|*.jpg;*.gif;*.bmp;*.png;*.jpeg";
    dialog.Title = "Select a text file";
    j'aime bien ton humour...
    Bon plus sérieusement...
    il faut assigner l'image au PictureBox avant d'essayer de la sauver...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Bitmap myBitmap2 = new Bitmap(myBitmap, new Size(150, 175));
    fsImg.Close();
    pictureBox1.Image = myBitmap2;                
    pictureBox1.Image.Save(Application.StartupPath);
    J'ai déjà fait comme vous avez dit et j'ai eu le bug du GDI
    A generic error occurred in GDI+.

  11. #11
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Ouais, c'est tellement gros que je n'y ai rien vu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pictureBox1.Image.Save(Application.StartupPath + "\\monImage.bmp");
    A part ça tu peux le faire directement avec mybitmap2

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par ppphil Voir le message
    Ouais, c'est tellement gros que je n'y ai rien vu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pictureBox1.Image.Save(Application.StartupPath + "\\monImage.bmp");
    A part ça tu peux le faire directement avec mybitmap2
    Merci ça marche bien maintenant. Mai comment puis-je la sauvegarder dans la base de données?

  13. #13
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Pour la sauvegarder en base de données, il faudra convertir ton image en byte[]. Je dis ça car tu as le problème de conversion inverse ici :
    http://www.developpez.net/forums/d92...ct-vers-image/

    Comme tu disposes du chemin, tu peux faire comme ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        static public byte[] GetImageArray(string filePath) {
          FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
          BinaryReader br = new BinaryReader(fs);
          byte[] imgByte = br.ReadBytes((int)fs.Length);
          br.Close();
          fs.Close();
          return imgByte;
        }

  14. #14
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Points : 45
    Points
    45
    Par défaut
    Merci pour vous. Je vais essayer ça dès que possible.

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    tu veux sauver soin lien dans la DB ou l'image elle même ? c'est pas tout à fait pareil... et excusez moi, si tu la stocke directe dans la DB... où est l'intéret de la copier dans le répertoire de l'application ? je veux dire... tu bouffe de la place inutilement... je sais bien que c'est pas le prix des disques dur qui ruine mais tout de même, un minimum de programmation propre et consommer le minimum de ressources possible, n'a jamais fait de mal à personne.

    en plus pourquoi personne ne pense jamais au namespace System.IO où on trouve tout ce qu'il faut pour faire de la copie de fichier... au moins si les problèmes sont dues aux droits d'accès tu le sais clairement et tu te tape pas une exception laconique genre Generic Exception in GDI+ qui ne t'apprend absolument facto rien.

  16. #16
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par cinemania Voir le message
    tu veux sauver soin lien dans la DB ou l'image elle même ? c'est pas tout à fait pareil... et excusez moi, si tu la stocke directe dans la DB... où est l'intéret de la copier dans le répertoire de l'application ? je veux dire... tu bouffe de la place inutilement... je sais bien que c'est pas le prix des disques dur qui ruine mais tout de même, un minimum de programmation propre et consommer le minimum de ressources possible, n'a jamais fait de mal à personne.

    en plus pourquoi personne ne pense jamais au namespace System.IO où on trouve tout ce qu'il faut pour faire de la copie de fichier... au moins si les problèmes sont dues aux droits d'accès tu le sais clairement et tu te tape pas une exception laconique genre Generic Exception in GDI+ qui ne t'apprend absolument facto rien.
    oui vous avez raison. Je pense que je vais la stocker directement comme image dans la base de données seulement sans a stocker dans le dossier de l'application. mais, comme j'ai dis j'ai un bug lorsque je veux prendre l'image de la bd pour l'utiliser après?
    Voilà le code pour stocker l'image dans la bd
    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
    OpenFileDialog dialog = new OpenFileDialog();
                dialog.Filter = "Image Files|*.jpg;*.gif;*.bmp;*.png;*.jpeg";
                dialog.InitialDirectory = "MyPictures";
                dialog.Title = "Select a text file";
                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    FileStream fsImg = new FileStream(dialog.FileName, FileMode.Open, FileAccess.Read);
                    Bitmap myBitmap = new Bitmap((Bitmap)Image.FromStream(fsImg));
                    Bitmap myBitmap2 = new Bitmap(myBitmap, new Size(150, 175));
     
                    pictureBox1.Image = myBitmap2;
                    pictureBox1.Image.Save(Application.StartupPath+"\\monimage2.bmp");
                    textBox1.Text = pictureBox1.ImageLocation;
                    string cnxString = "Data Source=STITEL\\SQLEXPRESS;Initial Catalog=test;Persist Security Info=True;User ID=root;Password=admin";
                    cnx = new SqlConnection(cnxString);
                    cnx.Open();
                    cmd = new SqlCommand("insert into Table_1 values('"+myBitmap2+"')",cnx);
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                    cnx.Dispose();
                    fsImg.Close();
    et voilà le code pour prendre l'image de la bd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cnx = new SqlConnection(cnxString);
                cnx.Open();
                cmd = new SqlCommand("select * from Table_1", cnx);
                SqlDataReader dtread = cmd.ExecuteReader();
     
                while (dtread.Read())
                {
                    pictureBox1.Image = (Image)dtread[0];
                    break;
                }

  17. #17
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Regarde ce que t'a écris binoo un peu plus haut.
    Tu dois pouvoir faire le contraire pour reconstituer ton image....

  18. #18
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Points : 45
    Points
    45
    Par défaut
    c'est bon j'ai trouvé une solution. Merci à vous

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

Discussions similaires

  1. [VBA-E] Copier une image dans un fichier word
    Par Vince_93700 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 09/05/2007, 09h12
  2. Copier une image dans un dossier
    Par L'aigle de Carthage dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/05/2007, 19h54
  3. Réponses: 3
    Dernier message: 30/10/2006, 11h21
  4. Placer une image dans un dossier où qu'elle soit
    Par st0nky dans le forum Langage
    Réponses: 2
    Dernier message: 04/12/2005, 21h22
  5. Comment copier une image dans le presse papier.
    Par cprogil dans le forum Langage
    Réponses: 7
    Dernier message: 09/09/2003, 15h54

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