Sauvegarde d'une image sans changement de couleur.

Résolu
cs_bouzazi Messages postés 27 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 12 novembre 2012 - 14 août 2012 à 15:38
cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 - 15 août 2012 à 19:03
Salut Tout le Monde,

je travail actuellement sur un projet de simulation, dans cette projet je donne la possibilité a l'expert (un des type d'utilisateur) de dessinée luis même une simulation (une sorte de topographie) avec un type d’échelle redéfinie ( dans la base de données) les couleurs et les valeurs puis je doit sauvegardé cette simulation( sous forme photo) dans la base de données pour être utiliser ultérieurement.

pour l'instant j'ai une forme avec une partie pour le chois de l’échelle, le chois de la couleur, la taille du pinceau. (tout sa fonctionne a merveille)
une PictureBox sur la quelle je dessine, la PictureBox a un fond vide ou bien avec une image de référence pour aidé l'utilisateur dans la phase de dessin.

le problème ce produit lorsque je veux sauvegardé ce que je vient de dessiner, j'utilise le code suivant:
Code C# :

bmpsave.Save(Environment.CurrentDirectory + @"\Images" + NomPatient + "_" + dat + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);


l'image est bien crée puis je la sauvegarde dans la base.

mais les couleur de l'image résultat ne sont pas tous conforme avec les couleurs de l’échelle que j'ai utilisé ( exemple couleur de l’échelle : (0,153,102) couleur sur l'image (1,153,102)) cette petite variation qui se produit me fausse tout le calcul qui vient après cette étape.
j'ai essayé avec d'autre format d'image (bmp, gif, jpeg, tiff) j'ai essayé avec certain type d'image de joué sur l'encodage
Code C# :

myEncoderParameter = new EncoderParameter(myEncoder, 100L);
myEncoderParameters.Param[0] = myEncoderParameter;
bmpsave.Save(@"D:\TestPhotoQualityHundred.jpg", jgpEncoder, myEncoderParameters)



ou bien avec :
Code C# :

EncoderParameter myEncoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)System.Drawing.Imaging.EncoderValue.CompressionNone);
EncoderParameter myEncoderParameterQ = new EncoderParameter(myEncoder, 100L);//(myEncoder, 100L);
EncoderParameter myEncoderParameterV = new EncoderParameter(System.Drawing.Imaging.Encoder.Version, (long)System.Drawing.Imaging.EncoderValue.VersionGif89);



mais j'ai toujours le même problème ( avec plus au moins une meilleur qualité de l'image selon le type et le options de l'image).

est ce que quelqu’un connait une façon pour crée cette image a partir de ce que je dessine sur la PictureBox sans que les couleurs ne subissent une dégradation ou une modifications.

Merci.

3 réponses

cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 3
14 août 2012 à 19:17
Bonjour,

Pour vérifier que le problème surviens bien au moment de la sauvegarde, je vous conseille de faire un snapshot de la picturebox et de comparer le résultat de ce snapshot avec vôtre fichier sauvegardé (couleur RGB identiques). Si c'est identique le problème est ailleurs.
En effet, je doute que le souçis provienne de la sauvegarde mais plutôt d'ailleurs dans le code...
3
cs_bouzazi Messages postés 27 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 12 novembre 2012
15 août 2012 à 11:54
Merci Beaucoup Capa;

Effectivement le problème ce pose avant l'étape de sauvegarde d'image. Lord de l'étape de dessin l'utilisateur doit choisir une couleur (a partir des valeur d'une échelle de la base de donnée) choisir une taille du pinceau. Puis il commence a dessiné.
Voici une partie du code due j'utilise :
private void PostOppictureBox_MouseDown(object sender, MouseEventArgs e)
        {
            if (modifSel)
            {
                if (e.Button == MouseButtons.Left)
                {
                    prev = e.Location;
                    isdrawing = true;
                    cv = new Curve();
                    cv.Color = color;
                    cv.Width = width;
                    cv.Pause = DateTime.Now - starttime;
                    starttime = DateTime.Now;                   

                    Pen p = new Pen(color, width); 
                    using (Graphics gr = PostOppictureBox.CreateGraphics())
                    {                        
                        gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;                        
                        gr.DrawEllipse(p, e.X, e.Y, width, width);
                        prev = e.Location;
                        cv.Coordinates.Add(prev);
                    }                 
                    p.Dispose();
                }
            }
        }



"color" contient déjà la valeur de la couleur récupère de la base.
Après cette étape je détecte la couleur dans la PictureBox. Mais la couleur détecte n'est pas exactement celle que je veut ( celle de l'échelle).

Est ce que je me suit trompé quelque part?

Merci
0
cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 3
15 août 2012 à 19:03
Hello...
Je vois pas de problème dans ta partie de code PostOppictureBox_MouseDown.
Le mieux serait que tu trace (debug) ta valeur de couleur jusqu'à détecter ou elle ne correspond plus a ce que tu veux.

Si tu le sent, montre la partie de code ou tu détecte la couleur dans la picturebox...peut être je verrais mieux le souçis.

Bon courage.
0
Rejoignez-nous