Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet > Développement Office System > InfoPath
InfoPath Forum d'entraide sur InfoPath (concevoir des formulaires basés sur XML)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/09/2012, 11h59   #1
Thomas_Dev
Candidat au titre de Membre du Club
 
Homme
Developpeur Consultant
Inscription : 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 : 12
Points : 12
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?
Thomas_Dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2012, 22h13   #2
billout rm
Membre chevronné
 
Avatar de billout rm
 
MVP InfoPath
Inscription : juillet 2007
Messages : 653
Détails du profil
Informations personnelles :
Âge : 29

Informations professionnelles :
Activité : MVP InfoPath

Informations forums :
Inscription : juillet 2007
Messages : 653
Points : 768
Points : 768
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
MVP InfoPath
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.
billout rm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2013, 15h09   #3
Thomas_Dev
Candidat au titre de Membre du Club
 
Homme
Developpeur Consultant
Inscription : 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 : 12
Points : 12
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 :
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 { }
        }
Thomas_Dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h41.


 
 
 
 
Partenaires

Hébergement Web