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 :

DrawImage : image mal détourée uniquement sur Windows 7


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    Par défaut DrawImage : image mal détourée uniquement sur Windows 7
    Bonjour à tous,

    Encore un mystère de l'informatique ... à moins que.

    J'ai une fonction qui prends un image et lui appose un filigrane dessus (pour protéger une image avec un logo). Mon code fonctionne à merveille sur tous les postes XP mais il y a un problème de détourage sur les postes en Win7 (32 ou 64 bits).
    Voyez par vous même => http://img36.imageshack.us/img36/376/g4u4.jpg

    J'utilise bien entendu la même appli avec les mêmes images, tout est identique.

    Je ne comprends pas.

    Voici mon code
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Dim vSignature As Image
            Dim vLargeur, vHauteur, vLargeurSignature, vHauteurSignature, vCpt, vPosX, vPosY As Integer
            Dim vGraph As Graphics
            Dim vImage, vImageThumb As Bitmap
            Dim vTransparence As Single = 0.5
            Dim vMatrix As Single()() = { _
                            New Single() {1, 0, 0, 0, 0}, _
                            New Single() {0, 1, 0, 0, 0}, _
                            New Single() {0, 0, 1, 0, 0}, _
                            New Single() {0, 0, 0, vTransparence, 0}, _
                            New Single() {0, 0, 0, 0, 1}}
            Dim vColorMatrix As New ColorMatrix(vMatrix)
            Dim vImageAtt As New ImageAttributes
     
            Const cHauteurMax As Integer = 2000
            Const cLargeurMax As Integer = 2000
     
            vImageAtt.SetColorMatrix( _
                           vColorMatrix, _
                           ColorMatrixFlag.Default, _
                           ColorAdjustType.Bitmap)
     
            vImage = New Bitmap(Application.StartupPath & "\Original.jpg")
     
            vLargeur = vImage.Width
            vHauteur = vImage.Height
     
            If vHauteur > cHauteurMax Then
                vLargeur = CInt((cHauteurMax * vLargeur) / vHauteur)
                vHauteur = cHauteurMax
            End If
     
            If vLargeur > cLargeurMax Then
                vHauteur = CInt((cLargeurMax * vHauteur) / vLargeur)
                vLargeur = cLargeurMax
            End If
     
            '1.1.8 : REDIMENSIONNEMENT DE L'IMAGE
            vImageThumb = CType(vImage.GetThumbnailImage(vLargeur, vHauteur, Nothing, Nothing), Bitmap)
     
            '1.1.9 : CREATION D'UN ENCODEUR POUR GERER LA QUALITE
            Dim vParamEncodeur As New Imaging.EncoderParameter(Imaging.Encoder.Quality, 90)
            Dim vEncodeur As New Imaging.EncoderParameters
            vEncodeur.Param(0) = vParamEncodeur
     
            '1.1.10 : CREATION DU CODEC POUR GERER LA FORMAT DE L'IMAGE
            Dim vCodec As Imaging.ImageCodecInfo() = Imaging.ImageCodecInfo.GetImageEncoders()
            For vCpt = 0 To vCodec.Length - 1
                If vCodec(vCpt).MimeType = "image/jpeg" Then
                    Exit For
                End If
            Next
     
            'Image temporaire
            vGraph = Graphics.FromImage(vImageThumb)
     
            'Qualité de l'image
            vGraph.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
     
            'Image Signature
            vSignature = Image.FromFile(Application.StartupPath & "\Fond.gif")
            vLargeurSignature = vSignature.Width
            vHauteurSignature = vSignature.Height
     
            'REDIMENSIONNEMENT DE LA SIGNATURE
            If vHauteurSignature > vHauteur Then
                vLargeurSignature = CInt((vHauteur * vLargeurSignature) / vHauteurSignature)
                vHauteurSignature = vHauteur
            End If
     
            If vLargeurSignature > vLargeur Then
                vHauteurSignature = CInt((vLargeur * vHauteurSignature) / vLargeurSignature)
                vLargeurSignature = vLargeur
            End If
     
            'POSITIONNEMENT AU MILIEU
            vPosX = CInt((vLargeur - vLargeurSignature) / 2)
            vPosY = CInt((vHauteur - vHauteurSignature) / 2)
     
            'DESSINE LE LOGO SUR L'IMAGE
            vGraph.DrawImage( _
                vSignature, _
                New Rectangle(vPosX, vPosY, vLargeurSignature, vHauteurSignature), _
                0, _
                0, _
                vSignature.Width, _
                vSignature.Height, _
                GraphicsUnit.Pixel, _
                vImageAtt)
     
            '1.1.11 : SAUVEGARDE L'IMAGE REDIMENSIONNER
            vImageThumb.Save(Application.StartupPath & "\Resultat.jpg", vCodec(vCpt), vEncodeur)
     
            '1.1.12 : DESTRUCTION DE L'IMAGE
            vImageThumb.Dispose()
    J'ai creusé dans tout les sens mais rien n'y fait.
    Si quelqu'un avait la solution se serait merveilleux.

    Merci d'avance

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    pas vraiment regardé le code mais l'explication ca peut se trouver

    windows forms se base sur gdi+, une dll de windows, qui est légèrement différente d'un os à l'autre, sur les os récents gdi+ appellle des fonctions plus récentes et de plus haut niveau d'autres dll je crois
    les encoder d'images utilisés sont ceux de windows aussi, et peut etre que là aussi ils diffèrent

    pour la solution essaye les propriétés de qualité sur graphics, il y en a plusieurs, certaines ne sont que pour le texte (drawstring) d'autres que pour le reste
    tu peux aussi essayer en png pour voir

    sinon je ne pense pas qu'il faille 100 lignes de code pour mettre une image sur une autre, mais plutot une dizaine (tant qu'à faire autant que l'image à coller ait déjà la gestion du canal alpha, en png par exemple)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    Par défaut
    Merci pour ta réponse et ton explication.

    Pour la qualité de Graphics tu parles de vGraph.SmoothingMode ?

    Et pour la longueur du code, je ne vois pas ce que je peux enlever d'autre

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/07/2013, 16h32
  2. Installer psql uniquement sur windows
    Par terrynurb dans le forum Installation
    Réponses: 1
    Dernier message: 19/11/2009, 15h32
  3. Réponses: 1
    Dernier message: 15/05/2008, 20h11
  4. image d'arrière plan unique sur tableau
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 06/07/2006, 09h57

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