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

InfoPath .NET Discussion :

Dessiner sur une image [IP-2010]


Sujet :

InfoPath .NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Developpeur Consultant
    Inscrit en
    Mars 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 22
    Points : 21
    Points
    21
    Par défaut Dessiner sur une image
    Bonjour,

    J'ai besoin de faire des annotations sur des images de mon formulaire. Les images sont des photos faites par l'utilisateur.

    J'ai pensé à mettre un champ "image manuscrite" avec une image de fond. Mais on ne peut le faire qu'en mode création et ce n'est pas le but.

    Du coup j'envisage 2 possibilités :
    Option 1 :
    Créer un champ image et un champ image manuscrite.
    et quand on clique sur un bouton cela met le contenu du champ image dans le champ image manuscrite. Après quoi l'utilisateur pourrait écrire sur l'image.
    J'ai essayé : ça ne marche pas. Les 2 images sont stockées en base64 mais pas de la même manière semble t-il.

    Option 2 plus compliquée:
    mettre un bouton avec du code c# et un champ image. quand on clique sur le bouton on ouvre une nouvelle fenêtre : un éditeur d'image. On y modifie l'image. Et quand on valide on colle l'image dans le champ image du formulaire.
    Cela demande un éditeur d'image capable d’interpréter l'image dans son format.

    Si vous avez une solution qui marche je prends!
    Pour l'option 1 pensez vous qu'il soit possible (avec un peu de code) de traduire l'image pour qu'elle soit lisible dans le champ image manuscrite?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,
    En effet, InfoPath permet d'ajouter une image de fond uniquement en mode création sur un control de type "Ink".

    Ce qui signifie que techniquement, nous ne pouvons pas avoir le cas ou l'utilisateur télécharge une photo puis réaliser des annotations dessus...
    Cela doit être assez compliqué à gérer au niveau de la superposition des images!
    La seule solution serait que l'utilisateur réaliser les modifications dans Paint par exemple avant de télécharger l'image dans le formulaire.

    Je vous avouerai que je n'ai pas d'idée sur ce coup là... Mais je suis preneur si vous avez une solution.
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Developpeur Consultant
    Inscrit en
    Mars 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    Je me suis re-penché sur le problème, voici la solution que j'ai retenue:

    Pour modifier une image l'utilisateur clique sur un bouton
    Je récupére l'image du formulaire dans un string
    je traduit ce string de base64 vers binaire
    j'enregistre cette image temporaire sur le disque avec une extension perso
    sur le PC surlequel le formulaire doit fonctionner je met "paint" par défaut pour cette extension
    j'ouvre l'image (avec paint)
    L'utilisateur fait ses modifs sout paint puis enregistre
    j'attends 2 minutes (ou moins si l utilisateur ferme paint avant)
    puis je récupère l'image temporaire
    je la retraduit en base64
    et je la met dans le formulaire

    si l'utilisateur dépasse le délai, paint se ferme sans enregistrer et on revient au formulaire.

    C'est clairement améliorable, mais ça à le mérite de fonctionner!

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    using Microsoft.Office.InfoPath;
    using System;
    using System.Windows.Forms;
    using System.Xml;
    using System.Xml.XPath;
    using mshtml;
    using System.Collections;
    using System.Xml.Xsl;
    using System.Diagnostics;
    using System.IO;
    using System.Drawing;
     
           public void CTRL568_5_Clicked(object sender, ClickedEventArgs e)'code pour retoucher l'image
            {
                try
                {
                    'verifier image non vide																	-ok
                    XPathNavigator nav = e.Source.CreateNavigator();
                    string s = nav.SelectSingleNode(@"my:champ109", NamespaceManager).Value;
                    if (s != "")
                    {
                        'enregistrer l'image dans un fichier temp: c:\GBV\temp.tom								-voir C:\Bureau Bis\Divers\surcharger image
                        byte[] image = Convert.FromBase64String(s);
                        MemoryStream memStr = new MemoryStream();
                        memStr.Write(image, 0, image.Length);
                        Image img = Image.FromStream(memStr);
                        img.Save(@"c:\GBV\temp.tom");			
                        'faire un processus qui ouvre temp.tom	
                        'sur le PC mettre paint pour ouvrir les fichier.tom
                        Process myProcess = new Process();
                        myProcess.StartInfo.FileName = @"c:\GBV\temp.tom";
                        myProcess.Start();
     
                        'limite de temps pour modifier l'image 2 minutes
                        bool completed = myProcess.WaitForExit(120000);
     
     
                        if (!completed)
                        {
                            ' Temps d'attente dépassé : on tue le processus
                            if (!myProcess.HasExited)
                                myProcess.Kill();
                            MessageBox.Show("limite de temps pour modifier l'image depassé (2 minutes)", " ", MessageBoxButtons.OK);
     
                        }
                        else
                        {
                        'quant l'utilisateur sort en enregistrant, je reconvertit en base64, puis j'insére l'image dans le formulaire
                            string resultatBase64 = "";
     
     
                            'convertir temp.tom en base64
                            string inputFileName = @"c:\GBV\temp.tom";
                            System.IO.FileStream inFile;
                            byte[] binaryData;
     
                            inFile = new System.IO.FileStream(inputFileName,
                                                      System.IO.FileMode.Open,
                                                      System.IO.FileAccess.Read);
                            binaryData = new Byte[inFile.Length];
                            long bytesRead = inFile.Read(binaryData, 0,
                                                 (int)inFile.Length);
                            inFile.Close();
                            resultatBase64 = System.Convert.ToBase64String(binaryData,
                                                         0,
                                                         binaryData.Length);
                            nav.SelectSingleNode(@"my:champ109", NamespaceManager).SetValue(resultatBase64);
                        }
     
                    }
                }
                catch { }
            }

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

Discussions similaires

  1. comment dessiner sur une image
    Par baracouda dans le forum Graphisme
    Réponses: 2
    Dernier message: 26/05/2006, 01h21
  2. Dessiner sur une image
    Par cquadjul dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/04/2006, 11h44
  3. Dessiner sur une image
    Par alex6891 dans le forum Java ME
    Réponses: 1
    Dernier message: 16/04/2006, 03h45
  4. Déplacer, zoomer, dessiner (sur) une image
    Par charlito dans le forum 2D
    Réponses: 4
    Dernier message: 22/02/2006, 02h58
  5. [Servlet] [Image] Dessiner sur une image
    Par gaia_dev dans le forum 2D
    Réponses: 5
    Dernier message: 01/09/2004, 18h11

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