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

VB.NET Discussion :

Transformation image JPEG


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Transformation image JPEG
    Bonjour,

    je cherche à enregistrer une image au format jpeg, à partir d'un fichier original que je pivote de 270°, (soit 90° antihoraire), sous VB.net 2010.

    Pour ce faire, j'utilise les classes GDI+ du Framework, à savoir les classes de System.Drawing, objet Bitmap et méthode Save.

    Mon soucis est que le format de couleur original n'est pas conservé.
    En effet, l'image d'origine est codé en YCbCr 4:4:4, mais après rotation et sauvegarde dans un autre fichier, le format de couleurs devient YCbCr 4:2:0...
    Ce qui est ennuyeux pour le décompresseur hardware que nous utilisons...

    Je remarque également, que la compression est plus forte que celle du fichier original, j'arrive cependant à l'améliorer en utilisant le paramètre Quality de l'encoder...

    Extrait du Code utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                   image = New System.Drawing.Bitmap("FirstImage.jpeg")
     
                   myImageCodecInfo = GetEncoderInfo(System.Drawing.Imaging.ImageFormat.Jpeg)
                   myEncoder = System.Drawing.Imaging.Encoder.Transformation
                   myEncoderParameters = New System.Drawing.Imaging.EncoderParameters(1)
     
                    'Transformation
                    myEncoderParameter = New System.Drawing.Imaging.EncoderParameter(myEncoder, Fix(System.Drawing.Imaging.EncoderValue.TransformRotate270))
                    myEncoderParameters.Param(0) = myEncoderParameter
     
                    image.Save("SecondImage.jpg", myImageCodecInfo, myEncoderParameters)
    J'avais d'abord utilisé la méthode image.RotateFlip puis Save au format Jpeg, mais le problème reste le même.

    Comment puis-je faire ma rotation en conservant tous les paramètres de compression et de format de couleur du fichier original?

    Merci d'avance pour votre aide.
    Eric

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je ne m'y connais (pas) vraiment (pas) en images, mais tu peux toujours jeter un œil sur Magick.net. C'est la version .net, ou du moins une passerelle, vers ImageMagick.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour Clément,

    merci de ta réponse, je vais regarder ca.

    Mais, surtout, ce que je ne comprends pas c'est pourquoi le Framework, et plus précisément sa classe GDI+, modifie les paramètres de compression et de couleurs du fichier original?...
    Même l'explorateur de Windows (7) permet de pivoter les images JPEG sans transformer les paramètres d'encodage...

    Il y a forcément quelque chose que je fais mal...

    Merci
    Eric

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 105
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    Les applis qui font de la rotation sans recompression utilisent un traitement très particulier.

    Regarde là, il y a peut être une solution:

    https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour Baloub,

    Merci de ta réponse.

    Si je comprends bien l'article que tu mets en lien, pour qu'il n'y ait aucune perte dans la transformation d'une image JPEG avec GDI+, il faut que les 2 dimensions, (largeur et hauteur), de l'image originale soient multiples de 16 pixels.
    C'est exactement ce que je constate avec mon décompresseur JPEG hardware...

    Les images transformées sont dégradées uniquement lorsque ces dimensions ne sont pas multiples de 16... (Ce qui me faisait penser que ces images passaient en YCbCr4:2:0 car dans ce format la décompression se fait par blocs de 16x16...)

    Ce n'est donc pas vraiment une solution pour moi, mais ça me permet, au moins, de prévenir mes clients sur cette contrainte.

    J'en déduis donc, que ni l'explorateur de Windows, ni les logiciels de traitement d'image n'utilisent GDI+...

    Il me reste à chercher une classe plus performante, (j'essaierai la solution ImageMagik proposée par Clément.)

    Merci à vous.

Discussions similaires

  1. Transformer une image jpeg en signal numérique
    Par coolhac dans le forum LabVIEW
    Réponses: 24
    Dernier message: 27/05/2009, 15h49
  2. Réponses: 6
    Dernier message: 16/06/2007, 17h53
  3. Compression d'une série d'images jpeg
    Par Tchello dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2003, 19h59
  4. Copier une image (jpeg) dans le presse papier
    Par benj63 dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/07/2002, 14h51
  5. comment réduire une image jpeg (taille x*y)
    Par don-diego dans le forum C
    Réponses: 4
    Dernier message: 14/07/2002, 20h06

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